diff --git a/README.md b/README.md index fbe30ce..fb52da9 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,8 @@ After instantiating a new instance the constructor returns an object that can be | `post-formatting-search` | After the formatting search has returned a result | ```address.events.on("post-formatting-search", function(data){ // ... });```| | `post-reset` | After the demo has been reset | ```address.events.on("post-reset", function(){ // ... });```| | `post-search-type-change` | After the search type has been changed | ```address.events.on("post-search-type-change", function(searchType){ // ... });```| +| `post-datasets-update` | To populate the authorized country dataset(s) into the country dataset dropdown | ```address.events.on("post-datasets-update", function(){ // ... });```| +| `error-display` | To display error when the selected search type is not supported for the country dataset selected | ```address.events.on("error-display", function (error){ // ... });```| | `request-timeout` | A timeout occurred during the XMLHttpRequest | ```address.events.on("request-timeout", function(xhr){ // ... });```| | `request-error` | A generic error occurred initiating the XMLHttpRequest | ```address.events.on("request-error", function(xhr){ // ... });```| | `request-error-400` | A 400 Bad Request error occurred | ```address.events.on("request-error-400", function(xhr){ // ... });```| diff --git a/dist/css/experian-address-validation.css b/dist/css/experian-address-validation.css index f0e5f9c..aeb4183 100644 --- a/dist/css/experian-address-validation.css +++ b/dist/css/experian-address-validation.css @@ -8,6 +8,63 @@ display: none; } +h2, h3{ + display:inline-block; +} + +.collapsible { + padding-left: 2px; +} + +.tab { + display: inline-block; + margin-left: var(--spaces); +} + +.tooltip { + position: relative; + display: inline-block; + border-bottom: 1px dotted black; +} + +.tooltip .tooltiptext { + visibility: hidden; + width: 250px; + background-color: #406eb3; + color: #fff; + text-align: center; + border-radius: 6px; + padding: 5px 0; + position: absolute; + z-index: 1; + bottom: 125%; + left: 50%; + margin-left: -60px; + opacity: 0; + transition: opacity 0.3s; +} + +.tooltip .tooltiptext::after { + content: ""; + position: absolute; + top: 100%; + left: 50%; + margin-left: -5px; + border-width: 5px; + border-style: solid; + border-color: #406eb3 transparent transparent transparent; +} + +.tooltip:hover .tooltiptext { + visibility: visible; + opacity: 1; +} + +.error-display .error-msg{ + color: red; + font-weight: bold; +} + /* Loading spinner styles */ @-webkit-keyframes spinner { 0% { diff --git a/dist/js/address-metadata-display.js b/dist/js/address-metadata-display.js new file mode 100644 index 0000000..45013b4 --- /dev/null +++ b/dist/js/address-metadata-display.js @@ -0,0 +1 @@ +function populateMetadata(e){address.getEnrichmentData(e.result.global_address_key);const t=e.result.confidence;if(t&&(document.querySelector(".metadata #confidence-key").innerText="Verified match"===t?"✔":"❌",document.querySelector(".metadata #confidence-value").innerText=t),e.metadata&&e.metadata.address_classification){const t=e.metadata.address_classification.delivery_type;t&&(document.querySelector(".metadata #delivery-type-key").innerText="residential"===t?"🏡":"🏢",document.querySelector(".metadata #delivery-type-value").innerText=t.substring(0,1).toUpperCase()+t.substring(1))}document.querySelector(".metadata #delivery-address-key").innerHTML=e.result.address?'':"",document.querySelector(".metadata #delivery-address-value").innerHTML=e.result.address?Object.values(e.result.address).filter((e=>""!==e)).join("
"):"",document.querySelector(".metadata").classList.remove("invisible"),populateAddressAdditionalInfo(address.componentsCollectionMap,document.querySelector("#components-collection")),populateAddressAdditionalInfo(address.metadataCollectionMap,document.querySelector("#metadata-collection"))}function populateAddressAdditionalInfo(e,t,a,d){if(e.size>0){let n=t.getElementsByClassName("content")[0];t.classList.remove("hidden");let s=n;if(a){let e=document.createElement("div");const t=document.createElement("h3");if(t.innerText=a,e.append(t),d){let t=document.createElement("span");t.classList.add("collapsible"),createCollapsibleELement(t,d);let a=document.createElement("div");a.classList.add("content"),a.setAttribute("style","display: none;"),s=a,e.append(t,a)}n.append(e)}populateContent(e,s)}}function createCollapsibleELement(e,t){let a=document.createElement("span");a.innerText="[Hide]",a.classList.add(`hide${t}`),a.classList.add("hidden");let d=document.createElement("span");d.innerText="[Show]",d.classList.add(`show${t}`),e.append(a,d),addCollapsibleEventListener(e,`.hide${t}`,`.show${t}`)}function populateContent(e,t){e.forEach(((e,a)=>{const d=document.createElement("span");let n=document.createElement("br");if("object"==typeof e)d.innerText=`${a}: `,t.append(d,n),addChildElement(Object.entries(e),t,1,!0);else{if(address.tooltipDescriptionMap.has(a)){let t=document.createElement("div");t.classList.add("tooltip"),t.innerText=`${e}`;let n=document.createElement("span");n.classList.add("tooltiptext"),n.innerText=`${address.tooltipDescriptionMap.get(a)}`,t.append(n),d.innerText=`${a}: `,d.append(t)}else d.innerText=`${a}: ${e}`;t.append(d,n)}})),t.append(document.createElement("br"))}function addChildElement(e,t,a,d){for(const[n,s]of e){const e=document.createElement("span");let o=document.createElement("br");if(e.classList.add("tab"),e.setAttribute("style","--spaces: "+2*a+"em;"),"object"==typeof s){let r=a;d&&(e.innerText=`${n}: `,r=a+1,t.append(e,o)),addChildElement(Object.entries(s),t,r,!(Array.isArray(s)&&1===s.length))}else e.innerText=`${n}: ${s}`,t.append(e,o)}}function resetMetadata(){document.querySelector(".metadata #confidence-key").innerText="",document.querySelector(".metadata #confidence-value").innerText="",document.querySelector(".metadata #delivery-type-key").innerText="",document.querySelector(".metadata #delivery-type-value").innerText="",document.querySelector(".metadata #what3words-key").classList.add("hidden"),document.querySelector(".metadata #what3words-value").classList.add("hidden"),document.querySelector(".metadata").classList.add("invisible"),resetMetadataElements(document.getElementById("validated-address-info")),resetMetadataElements(document.getElementById("components-collection"),!0),document.querySelector("#components-collection").classList.add("hidden"),resetMetadataElements(document.getElementById("metadata-collection"),!0),document.querySelector("#metadata-collection").classList.add("hidden"),resetMetadataElements(document.getElementById("enrichment"),!0),document.querySelector("#enrichment").classList.add("hidden"),document.querySelector("#map").classList.add("hidden")}function resetMetadataElements(e,t){t&&(e.querySelector(".hide").classList.add("hidden"),e.querySelector(".show").classList.remove("hidden")),e.querySelectorAll(".content").forEach((e=>{e.style.display=t?"none":"block",t&&(removeElements(e.getElementsByTagName("div")),removeElements(e.getElementsByTagName("span")),removeElements(e.getElementsByTagName("br")),removeElements(e.getElementsByTagName("h3")))}))}function removeElements(e){Array.from(e).forEach((e=>e.remove()))}function onContentLoaded(){document.querySelectorAll(".collapsible").forEach((e=>addCollapsibleEventListener(e,".hide",".show")))}function addCollapsibleEventListener(e,t,a){e.addEventListener("click",(function(){let e=this.nextElementSibling,d=e.parentElement,n=d.querySelector(t),s=d.querySelector(a);"block"===e.style.display?(e.style.display="none",n.classList.add("hidden"),s.classList.remove("hidden")):(e.style.display="block",n.classList.remove("hidden"),s.classList.add("hidden"))}))}address.events.on("post-enrichment",(function(e){let t=document.querySelector("#enrichment");if(address.geocodes.detailsMap.size>0||e.result.what3words&&e.result.what3words.latitude){let s,o,r,i,l,c;document.querySelector(".metadata #what3words-key").classList.add("hidden"),document.querySelector(".metadata #what3words-value").classList.add("hidden"),t.classList.remove("hidden"),populateAddressAdditionalInfo(address.cvHousehold.detailsMap,t,address.cvHousehold.title,1),populateAddressAdditionalInfo(address.geocodes.detailsMap,t,address.geocodes.title,2),e.result.what3words&&e.result.what3words.latitude&&(document.querySelector(".metadata #what3words-key").classList.remove("hidden"),document.querySelector(".metadata #what3words-value").classList.remove("hidden"),document.querySelector(".metadata #what3words-value").innerHTML="///"+e.result.what3words.name,s=e.result.what3words.latitude,o=e.result.what3words.longitude,r=[s,o]),e.result.nzl_regional_geocodes?(i=address.geocodes.detailsMap.get("Centroid of Property Latitude"),l=address.geocodes.detailsMap.get("Centroid of Property Longitude")):(i=address.geocodes.detailsMap.get("Latitude"),l=address.geocodes.detailsMap.get("Longitude")),i&&l&&(c=[i,l]);var a=L.icon({iconUrl:"./dist/images/w3w.loc.png",iconSize:[30,37],iconAnchor:[15,36],popupAnchor:[0,-20]});if(r||c){document.querySelector("#map").classList.remove("hidden"),addressValidationMap?(addressValidationW3wMarker&&addressValidationW3wMarker.remove(),addressValidationGeoMarker&&addressValidationGeoMarker.remove()):(addressValidationMap=L.map("map").setView([51.500264,.633506],16),L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© OpenStreetMap contributors'}).addTo(addressValidationMap));var d=[];r&&(addressValidationMap.panTo(r,{duration:1}),addressValidationW3wMarker=L.marker(r,{icon:a}).addTo(addressValidationMap),d.push(addressValidationW3wMarker)),c&&(addressValidationMap.panTo(c,{duration:1}),addressValidationGeoMarker=L.marker(c).addTo(addressValidationMap),d.push(addressValidationGeoMarker));var n=L.featureGroup(d);addressValidationMap.fitBounds(n.getBounds().pad(.25))}}address.premiumLocationInsightMap.size>0&&(t.classList.remove("hidden"),populateAddressAdditionalInfo(address.premiumLocationInsightMap,t,"Premium Location Insight",3))})),document.addEventListener("DOMContentLoaded",onContentLoaded); \ No newline at end of file diff --git a/dist/js/experian-address-validation.js b/dist/js/experian-address-validation.js index 2971d7a..3e0d92a 100644 --- a/dist/js/experian-address-validation.js +++ b/dist/js/experian-address-validation.js @@ -1,2 +1,2 @@ -!function(){"use strict";var e,s,t,o=function(){function e(){this.collection={}}return e.prototype.on=function(e,s){this.collection[e]=this.collection[e]||[],this.collection[e].push(s)},e.prototype.trigger=function(e,s){if(this.collection[e])for(var t=0;t=200&&d.currentRequest.status<400){var s=JSON.parse(d.currentRequest.responseText);t(s)}else d.instance.searchSpinner.hide(),d.instance.events.trigger("request-error",e),d.instance.events.trigger("request-error-".concat(d.currentRequest.status),e)},this.currentRequest.onerror=function(e){d.instance.searchSpinner.hide(),d.instance.events.trigger("request-error",e)},this.currentRequest.ontimeout=function(e){d.instance.searchSpinner.hide(),d.instance.events.trigger("request-timeout",e)},this.currentRequest.send(o)},e}();!function(e){e.AUTOCOMPLETE="autocomplete",e.SINGLELINE="singleline",e.VALIDATE="validate"}(e||(e={})),function(e){e[e.SEARCH=1]="SEARCH",e[e.WHAT3WORDS=2]="WHAT3WORDS",e[e.UDPRN=3]="UDPRN"}(s||(s={})),function(e){e.WHAT3WORDS="what3words",e.UDPRN="udprn"}(t||(t={}));var i={avMode:s.SEARCH,searchType:e.AUTOCOMPLETE,input:{placeholderText:"Start typing an address...",applyFocus:!1},formattedAddressContainer:{showHeading:!1,headingType:"h3",validatedHeadingText:"Validated address",manualHeadingText:"Manual address entered"},searchAgain:{visible:!0,text:"Search again"},useAddressEnteredText:" - Use address entered or try again...",useSpinner:!1,language:"en",addressLineLabels:["address_line_1","address_line_2","address_line_3","locality","region","postal_code","country"]},r=[{country:"Afghanistan",iso3Code:"AFG",iso2Code:"AF",datasetCode:"af-address-ed",searchType:"singleline, validate"},{country:"Afghanistan",iso3Code:"AFG",iso2Code:"AF",datasetCode:"af-address-eh",searchType:"autocomplete"},{country:"Albania",iso3Code:"ALB",iso2Code:"AL",datasetCode:"al-address-ed",searchType:"singleline, validate"},{country:"Albania",iso3Code:"ALB",iso2Code:"AL",datasetCode:"al-address-eh",searchType:"autocomplete"},{country:"Algeria",iso3Code:"DZA",iso2Code:"DZ",datasetCode:"dz-address-ed",searchType:"singleline, validate"},{country:"Algeria",iso3Code:"DZA",iso2Code:"DZ",datasetCode:"dz-address-eh",searchType:"autocomplete"},{country:"American Samoa",iso3Code:"ASM",iso2Code:"AS",datasetCode:"as-address-eh",searchType:"autocomplete"},{country:"Andorra",iso3Code:"AND",iso2Code:"AD",datasetCode:"ad-address-ed",searchType:"singleline, validate"},{country:"Andorra",iso3Code:"AND",iso2Code:"AD",datasetCode:"ad-address-eh",searchType:"autocomplete"},{country:"Angola",iso3Code:"AGO",iso2Code:"AO",datasetCode:"ao-address-ed",searchType:"singleline, validate"},{country:"Angola",iso3Code:"AGO",iso2Code:"AO",datasetCode:"ao-address-eh",searchType:"autocomplete"},{country:"Anguilla",iso3Code:"AIA",iso2Code:"AI",datasetCode:"ai-address-eh",searchType:"autocomplete"},{country:"Antarctica",iso3Code:"ATA",iso2Code:"AQ",datasetCode:"aq-address-ed",searchType:"singleline, validate"},{country:"Antigua and Barbuda",iso3Code:"ATG",iso2Code:"AG",datasetCode:"ag-address-ed",searchType:"singleline, validate"},{country:"Antigua and Barbuda",iso3Code:"ATG",iso2Code:"AG",datasetCode:"ag-address-eh",searchType:"autocomplete"},{country:"Argentina",iso3Code:"ARG",iso2Code:"AR",datasetCode:"ar-address-ed",searchType:"singleline, validate"},{country:"Argentina",iso3Code:"ARG",iso2Code:"AR",datasetCode:"ar-address-eh",searchType:"autocomplete"},{country:"Armenia",iso3Code:"ARM",iso2Code:"AM",datasetCode:"am-address-ed",searchType:"singleline, validate"},{country:"Armenia",iso3Code:"ARM",iso2Code:"AM",datasetCode:"am-address-eh",searchType:"autocomplete"},{country:"Aruba",iso3Code:"ABW",iso2Code:"AW",datasetCode:"aw-address-ed",searchType:"singleline, validate"},{country:"Aruba",iso3Code:"ABW",iso2Code:"AW",datasetCode:"aw-address-eh",searchType:"autocomplete"},{country:"Australia DataFusion",iso3Code:"AUS",iso2Code:"AU",datasetCode:"au-address-datafusion",searchType:"autocomplete, singleline, typedown"},{country:"Australia Geocoded National Address",iso3Code:"AUS",iso2Code:"AU",datasetCode:"au-address-gnaf",searchType:"autocomplete, singleline, typedown, validate"},{country:"Australia Postal Address",iso3Code:"AUS",iso2Code:"AU",datasetCode:"au-address",searchType:"autocomplete, singleline, typedown, validate"},{country:"Austria",iso3Code:"AUT",iso2Code:"AT",datasetCode:"at-address-eh",searchType:"autocomplete"},{country:"Austria",iso3Code:"AUT",iso2Code:"AT",datasetCode:"az-address-ed",searchType:"singleline, validate"},{country:"Azerbaijan",iso3Code:"AZE",iso2Code:"AZ",datasetCode:"az-address-ed",searchType:"singleline, validate"},{country:"Azerbaijan",iso3Code:"AZE",iso2Code:"AZ",datasetCode:"az-address-eh",searchType:"autocomplete"},{country:"Bahamas",iso3Code:"BHS",iso2Code:"BS",datasetCode:"bs-address-ed",searchType:"singleline, validate"},{country:"Bahamas",iso3Code:"BHS",iso2Code:"BS",datasetCode:"bs-address-eh",searchType:"autocomplete"},{country:"Bahrain",iso3Code:"BHR",iso2Code:"BH",datasetCode:"bh-address-ed",searchType:"singleline, validate"},{country:"Bahrain",iso3Code:"BHR",iso2Code:"BH",datasetCode:"bh-address-eh",searchType:"autocomplete"},{country:"Bangladesh",iso3Code:"BGD",iso2Code:"BD",datasetCode:"bd-address-ed",searchType:"singleline, validate"},{country:"Bangladesh",iso3Code:"BGD",iso2Code:"BD",datasetCode:"bd-address-eh",searchType:"autocomplete"},{country:"Barbados",iso3Code:"BRB",iso2Code:"BB",datasetCode:"bb-address-ed",searchType:"singleline, validate"},{country:"Barbados",iso3Code:"BRB",iso2Code:"BB",datasetCode:"bb-address-eh",searchType:"autocomplete"},{country:"Belarus",iso3Code:"BLR",iso2Code:"BY",datasetCode:"by-address-ed",searchType:"singleline, validate"},{country:"Belarus",iso3Code:"BLR",iso2Code:"BY",datasetCode:"by-address-eh",searchType:"autocomplete"},{country:"Belgium",iso3Code:"BEL",iso2Code:"BE",datasetCode:"be-address",searchType:"singleline, typedown"},{country:"Belgium",iso3Code:"BEL",iso2Code:"BE",datasetCode:"be-address-ed",searchType:" validate"},{country:"Belgium",iso3Code:"BEL",iso2Code:"BE",datasetCode:"be-address-eh",searchType:"autocomplete"},{country:"Belize",iso3Code:"BLZ",iso2Code:"BZ",datasetCode:"bz-address-ed",searchType:"singleline, validate"},{country:"Belize",iso3Code:"BLZ",iso2Code:"BZ",datasetCode:"bz-address-eh",searchType:"autocomplete"},{country:"Benin",iso3Code:"BEN",iso2Code:"BJ",datasetCode:"bj-address-ed",searchType:"singleline, validate"},{country:"Benin",iso3Code:"BEN",iso2Code:"BJ",datasetCode:"bj-address-eh",searchType:"autocomplete"},{country:"Bermuda",iso3Code:"BMU",iso2Code:"BM",datasetCode:"bm-address-ed",searchType:"singleline, validate"},{country:"Bermuda",iso3Code:"BMU",iso2Code:"BM",datasetCode:"bm-address-eh",searchType:"autocomplete"},{country:"Bhutan",iso3Code:"BTN",iso2Code:"BT",datasetCode:"bt-address-ed",searchType:"singleline, validate"},{country:"Bhutan",iso3Code:"BTN",iso2Code:"BT",datasetCode:"bt-address-eh",searchType:"autocomplete"},{country:"Bolivia",iso3Code:"BOL",iso2Code:"BO",datasetCode:"bo-address-ed",searchType:"singleline, validate"},{country:"Bolivia",iso3Code:"BOL",iso2Code:"BO",datasetCode:"bo-address-eh",searchType:"autocomplete"},{country:"Bonaire, Sint Eustatius and Saba",iso3Code:"BES",iso2Code:"BQ",datasetCode:"bq-address-ed",searchType:"singleline, validate"},{country:"Bonaire, Sint Eustatius and Saba",iso3Code:"BES",iso2Code:"BQ",datasetCode:"bq-address-eh",searchType:"autocomplete"},{country:"Bosnia and Herzegovina",iso3Code:"BIH",iso2Code:"BA",datasetCode:"ba-address-ed",searchType:"singleline, validate"},{country:"Bosnia and Herzegovina",iso3Code:"BIH",iso2Code:"BA",datasetCode:"ba-address-eh",searchType:"autocomplete"},{country:"Botswana",iso3Code:"BWA",iso2Code:"BW",datasetCode:"bw-address-ed",searchType:"singleline, validate"},{country:"Botswana",iso3Code:"BWA",iso2Code:"BW",datasetCode:"bw-address-eh",searchType:"autocomplete"},{country:"Brazil",iso3Code:"BRA",iso2Code:"BR",datasetCode:"br-address-ed",searchType:"singleline, validate"},{country:"Brazil",iso3Code:"BRA",iso2Code:"BR",datasetCode:"br-address-eh",searchType:"autocomplete"},{country:"Brunei Darussalam",iso3Code:"BRN",iso2Code:"BN",datasetCode:"bn-address-ed",searchType:"singleline, validate"},{country:"Brunei Darussalam",iso3Code:"BRN",iso2Code:"BN",datasetCode:"bn-address-eh",searchType:"autocomplete"},{country:"Bulgaria",iso3Code:"BGR",iso2Code:"BG",datasetCode:"bg-address-ed",searchType:"singleline, validate"},{country:"Bulgaria",iso3Code:"BGR",iso2Code:"BG",datasetCode:"bg-address-eh",searchType:"autocomplete"},{country:"Burkina Faso",iso3Code:"BFA",iso2Code:"BF",datasetCode:"bf-address-ed",searchType:"singleline, validate"},{country:"Burkina Faso",iso3Code:"BFA",iso2Code:"BF",datasetCode:"bf-address-eh",searchType:"autocomplete"},{country:"Burundi",iso3Code:"BDI",iso2Code:"BI",datasetCode:"bi-address-eh",searchType:"autocomplete"},{country:"Cambodia",iso3Code:"KHM",iso2Code:"KH",datasetCode:"kh-address-ed",searchType:"singleline, validate"},{country:"Cambodia",iso3Code:"KHM",iso2Code:"KH",datasetCode:"kh-address-eh",searchType:"autocomplete"},{country:"Cameroon",iso3Code:"CMR",iso2Code:"CM",datasetCode:"cm-address-ed",searchType:"singleline, validate"},{country:"Cameroon",iso3Code:"CMR",iso2Code:"CM",datasetCode:"cm-address-eh",searchType:"autocomplete"},{country:"Canada",iso3Code:"CAN",iso2Code:"CA",datasetCode:"ca-address",searchType:"autocomplete, singleline, typedown, validate"},{country:"Cape Verde",iso3Code:"CPV",iso2Code:"CV",datasetCode:"cv-address-ed",searchType:"singleline, validate"},{country:"Cape Verde",iso3Code:"CPV",iso2Code:"CV",datasetCode:"cv-address-eh",searchType:"autocomplete"},{country:"Cayman Islands",iso3Code:"CYM",iso2Code:"KY",datasetCode:"ky-address-ed",searchType:"singleline, validate"},{country:"Cayman Islands",iso3Code:"CYM",iso2Code:"KY",datasetCode:"ky-address-eh",searchType:"autocomplete"},{country:"Central African Republic",iso3Code:"CAF",iso2Code:"CF",datasetCode:"cf-address-ed",searchType:"singleline, validate"},{country:"Central African Republic",iso3Code:"CAF",iso2Code:"CF",datasetCode:"cf-address-eh",searchType:"autocomplete"},{country:"Chad",iso3Code:"TCD",iso2Code:"TD",datasetCode:"td-address-ed",searchType:"singleline, validate"},{country:"Chad",iso3Code:"TCD",iso2Code:"TD",datasetCode:"td-address-eh",searchType:"autocomplete"},{country:"Chile",iso3Code:"CHL",iso2Code:"CL",datasetCode:"cl-address-ed",searchType:"singleline, validate"},{country:"Chile",iso3Code:"CHL",iso2Code:"CL",datasetCode:"cl-address-eh",searchType:"autocomplete"},{country:"China",iso3Code:"CHN",iso2Code:"CN",datasetCode:"cn-address-ed",searchType:"singleline, validate"},{country:"China",iso3Code:"CHN",iso2Code:"CN",datasetCode:"cn-address-eh",searchType:"autocomplete"},{country:"Christmas Island",iso3Code:"CXR",iso2Code:"CX",datasetCode:"cx-address-eh",searchType:"autocomplete"},{country:"Cocos Island",iso3Code:"CCK",iso2Code:"CC",datasetCode:"cc-address-eh",searchType:"autocomplete"},{country:"Colombia",iso3Code:"COL",iso2Code:"CO",datasetCode:"co-address-ed",searchType:"singleline, validate"},{country:"Colombia",iso3Code:"COL",iso2Code:"CO",datasetCode:"co-address-eh",searchType:"autocomplete"},{country:"Comoros",iso3Code:"COM",iso2Code:"KM",datasetCode:"km-address-ed",searchType:"singleline, validate"},{country:"Comoros",iso3Code:"COM",iso2Code:"KM",datasetCode:"km-address-eh",searchType:"autocomplete"},{country:"Congo",iso3Code:"COG",iso2Code:"CG",datasetCode:"cg-address-ed",searchType:"singleline, validate"},{country:"Congo",iso3Code:"COG",iso2Code:"CG",datasetCode:"cg-address-eh",searchType:"autocomplete"},{country:"Congo, The Democratic Republic of the",iso3Code:"COD",iso2Code:"CD",datasetCode:"cd-address-ed",searchType:"singleline, validate"},{country:"Congo, The Democratic Republic of the",iso3Code:"COD",iso2Code:"CD",datasetCode:"cd-address-eh",searchType:"autocomplete"},{country:"Cook Islands",iso3Code:"COK",iso2Code:"CK",datasetCode:"ck-address-ed",searchType:"singleline, validate"},{country:"Cook Islands",iso3Code:"COK",iso2Code:"CK",datasetCode:"ck-address-eh",searchType:"autocomplete"},{country:"Costa Rica",iso3Code:"CRI",iso2Code:"CR",datasetCode:"cr-address-ed",searchType:"singleline, validate"},{country:"Costa Rica",iso3Code:"CRI",iso2Code:"CR",datasetCode:"cr-address-eh",searchType:"autocomplete"},{country:"Croatia",iso3Code:"HRV",iso2Code:"HR",datasetCode:"hr-address-ed",searchType:"singleline, validate"},{country:"Croatia",iso3Code:"HRV",iso2Code:"HR",datasetCode:"hr-address-eh",searchType:"autocomplete"},{country:"Cuba",iso3Code:"CUB",iso2Code:"CU",datasetCode:"cu-address-ed",searchType:"singleline, validate"},{country:"Cuba",iso3Code:"CUB",iso2Code:"CU",datasetCode:"cu-address-eh",searchType:"autocomplete"},{country:"Curaçao",iso3Code:"CUW",iso2Code:"CW",datasetCode:"cw-address-ed",searchType:"singleline, validate"},{country:"Curaçao",iso3Code:"CUW",iso2Code:"CW",datasetCode:"cw-address-eh",searchType:"autocomplete"},{country:"Cyprus",iso3Code:"CYP",iso2Code:"CY",datasetCode:"cy-address-ed",searchType:"singleline, validate"},{country:"Cyprus",iso3Code:"CYP",iso2Code:"CY",datasetCode:"cy-address-eh",searchType:"autocomplete"},{country:"Czech Republic",iso3Code:"CZE",iso2Code:"CZ",datasetCode:"cz-address-ed",searchType:"singleline, validate"},{country:"Czech Republic",iso3Code:"CZE",iso2Code:"CZ",datasetCode:"cz-address-eh",searchType:"autocomplete"},{country:"Côte d'Ivoire",iso3Code:"CIV",iso2Code:"CI",datasetCode:"ci-address-ed",searchType:"singleline, validate"},{country:"Côte d'Ivoire",iso3Code:"CIV",iso2Code:"CI",datasetCode:"ci-address-eh",searchType:"autocomplete"},{country:"Denmark",iso3Code:"DNK",iso2Code:"DK",datasetCode:"dk-address-ed",searchType:"singleline, validate"},{country:"Denmark",iso3Code:"DNK",iso2Code:"DK",datasetCode:"dk-address-eh",searchType:"autocomplete"},{country:"Djibouti",iso3Code:"DJI",iso2Code:"DJ",datasetCode:"dj-address-ed",searchType:"singleline, validate"},{country:"Djibouti",iso3Code:"DJI",iso2Code:"DJ",datasetCode:"dj-address-eh",searchType:"autocomplete"},{country:"Dominica",iso3Code:"DMA",iso2Code:"DM",datasetCode:"dm-address-ed",searchType:"singleline, validate"},{country:"Dominica",iso3Code:"DMA",iso2Code:"DM",datasetCode:"dm-address-eh",searchType:"autocomplete"},{country:"Dominican Republic",iso3Code:"DOM",iso2Code:"DO",datasetCode:"do-address-ed",searchType:"singleline, validate"},{country:"Dominican Republic",iso3Code:"DOM",iso2Code:"DO",datasetCode:"do-address-eh",searchType:"autocomplete"},{country:"Ecuador",iso3Code:"ECU",iso2Code:"EC",datasetCode:"ec-address-ed",searchType:"singleline, validate"},{country:"Ecuador",iso3Code:"ECU",iso2Code:"EC",datasetCode:"ec-address-eh",searchType:"autocomplete"},{country:"Egypt",iso3Code:"EGY",iso2Code:"EG",datasetCode:"eg-address-ed",searchType:"singleline, validate"},{country:"Egypt",iso3Code:"EGY",iso2Code:"EG",datasetCode:"eg-address-eh",searchType:"autocomplete"},{country:"El Salvador",iso3Code:"SLV",iso2Code:"SV",datasetCode:"sv-address-ed",searchType:"singleline, validate"},{country:"El Salvador",iso3Code:"SLV",iso2Code:"SV",datasetCode:"sv-address-eh",searchType:"autocomplete"},{country:"Equatorial Guinea",iso3Code:"GNQ",iso2Code:"GQ",datasetCode:"gq-address-ed",searchType:"singleline, validate"},{country:"Equatorial Guinea",iso3Code:"GNQ",iso2Code:"GQ",datasetCode:"gq-address-eh",searchType:"autocomplete"},{country:"Eritrea",iso3Code:"ERI",iso2Code:"ER",datasetCode:"er-address-ed",searchType:"singleline, validate"},{country:"Eritrea",iso3Code:"ERI",iso2Code:"ER",datasetCode:"er-address-eh",searchType:"autocomplete"},{country:"Estonia",iso3Code:"EST",iso2Code:"EE",datasetCode:"ee-address-ed",searchType:"singleline, validate"},{country:"Estonia",iso3Code:"EST",iso2Code:"EE",datasetCode:"ee-address-eh",searchType:"autocomplete"},{country:"Ethiopia",iso3Code:"ETH",iso2Code:"ET",datasetCode:"et-address-ed",searchType:"singleline, validate"},{country:"Ethiopia",iso3Code:"ETH",iso2Code:"ET",datasetCode:"et-address-eh",searchType:"autocomplete"},{country:"Falkland Islands (Malvinas)",iso3Code:"FLK",iso2Code:"FK",datasetCode:"fk-address-eh",searchType:"autocomplete"},{country:"Faroe Islands",iso3Code:"FRO",iso2Code:"FO",datasetCode:"fo-address-ed",searchType:"singleline, validate"},{country:"Faroe Islands",iso3Code:"FRO",iso2Code:"FO",datasetCode:"fo-address-eh",searchType:"autocomplete"},{country:"Fiji",iso3Code:"FJI",iso2Code:"FJ",datasetCode:"fj-address-ed",searchType:"singleline, validate"},{country:"Fiji",iso3Code:"FJI",iso2Code:"FJ",datasetCode:"fj-address-eh",searchType:"autocomplete"},{country:"Finland",iso3Code:"FIN",iso2Code:"FI",datasetCode:"fi-address",searchType:"singleline, typedown"},{country:"Finland",iso3Code:"FIN",iso2Code:"FI",datasetCode:"fi-address-ed",searchType:"validate"},{country:"Finland",iso3Code:"FIN",iso2Code:"FI",datasetCode:"fi-address-eh",searchType:"autocomplete"},{country:"France Street Level",iso3Code:"FRA",iso2Code:"FR",datasetCode:"fr-address-streetlevel",searchType:"singleline, typedown, validate"},{country:"France Sub-Premises Level",iso3Code:"FRA",iso2Code:"FR",datasetCode:"fr-additional-hexaline3",searchType:"autocomplete, singleline, typedown"},{country:"France Premises Level",iso3Code:"FRA",iso2Code:"FR",datasetCode:"fr-address",searchType:"singleline, typedown, validate"},{country:"French Guiana",iso3Code:"GUF",iso2Code:"GF",datasetCode:"gf-address-eh",searchType:"autocomplete"},{country:"French Polynesia",iso3Code:"PYF",iso2Code:"PF",datasetCode:"pf-address-eh",searchType:"autocomplete"},{country:"Gabon",iso3Code:"GAB",iso2Code:"GA",datasetCode:"ga-address-ed",searchType:"singleline, validate"},{country:"Gabon",iso3Code:"GAB",iso2Code:"GA",datasetCode:"ga-address-eh",searchType:"autocomplete"},{country:"Gambia",iso3Code:"GMB",iso2Code:"GM",datasetCode:"gm-address-ed",searchType:"singleline, validate"},{country:"Gambia",iso3Code:"GMB",iso2Code:"GM",datasetCode:"gm-address-eh",searchType:"autocomplete"},{country:"Georgia",iso3Code:"GEO",iso2Code:"GE",datasetCode:"ge-address-ed",searchType:"singleline, validate"},{country:"Georgia",iso3Code:"GEO",iso2Code:"GE",datasetCode:"ge-address-eh",searchType:"autocomplete"},{country:"Germany",iso3Code:"DEU",iso2Code:"DE",datasetCode:"de-address",searchType:"singleline, typedown, validate"},{country:"Germany",iso3Code:"DEU",iso2Code:"DE",datasetCode:"de-address-ed",searchType:"validate"},{country:"Germany",iso3Code:"DEU",iso2Code:"DE",datasetCode:"de-address-eh",searchType:"autocomplete"},{country:"Ghana",iso3Code:"GHA",iso2Code:"GH",datasetCode:"gh-address-ed",searchType:"singleline, validate"},{country:"Ghana",iso3Code:"GHA",iso2Code:"GH",datasetCode:"gh-address-eh",searchType:"autocomplete"},{country:"Gibraltar",iso3Code:"GIB",iso2Code:"GI",datasetCode:"gi-address-eh",searchType:"autocomplete"},{country:"Greece",iso3Code:"GRC",iso2Code:"GR",datasetCode:"gr-address-ed",searchType:"singleline, validate"},{country:"Greece",iso3Code:"GRC",iso2Code:"GR",datasetCode:"gr-address-eh",searchType:"autocomplete"},{country:"Greenland",iso3Code:"GRL",iso2Code:"GL",datasetCode:"gl-address-ed",searchType:"singleline, validate"},{country:"Greenland",iso3Code:"GRL",iso2Code:"GL",datasetCode:"gl-address-eh",searchType:"autocomplete"},{country:"Grenada",iso3Code:"GRD",iso2Code:"GD",datasetCode:"gd-address-ed",searchType:"singleline, validate"},{country:"Grenada",iso3Code:"GRD",iso2Code:"GD",datasetCode:"gd-address-eh",searchType:"autocomplete"},{country:"Guadeloupe",iso3Code:"GLP",iso2Code:"GP",datasetCode:"gp-address-eh",searchType:"autocomplete"},{country:"Guam",iso3Code:"GUM",iso2Code:"GU",datasetCode:"gu-address-eh",searchType:"autocomplete"},{country:"Guatemala",iso3Code:"GTM",iso2Code:"GT",datasetCode:"gt-address-ed",searchType:"singleline, validate"},{country:"Guatemala",iso3Code:"GTM",iso2Code:"GT",datasetCode:"gt-address-eh",searchType:"autocomplete"},{country:"Guinea",iso3Code:"GIN",iso2Code:"GN",datasetCode:"gn-address-ed",searchType:"singleline, validate"},{country:"Guinea",iso3Code:"GIN",iso2Code:"GN",datasetCode:"gn-address-eh",searchType:"autocomplete"},{country:"Guinea-Bissau",iso3Code:"GNB",iso2Code:"GW",datasetCode:"gw-address-ed",searchType:"singleline, validate"},{country:"Guinea-Bissau",iso3Code:"GNB",iso2Code:"GW",datasetCode:"gw-address-eh",searchType:"autocomplete"},{country:"Guyana",iso3Code:"GUY",iso2Code:"GY",datasetCode:"gy-address-ed",searchType:"singleline, validate"},{country:"Guyana",iso3Code:"GUY",iso2Code:"GY",datasetCode:"gy-address-eh",searchType:"autocomplete"},{country:"Haiti",iso3Code:"HTI",iso2Code:"HT",datasetCode:"ht-address-ed",searchType:"singleline, validate"},{country:"Haiti",iso3Code:"HTI",iso2Code:"HT",datasetCode:"ht-address-eh",searchType:"autocomplete"},{country:"Honduras",iso3Code:"HND",iso2Code:"HN",datasetCode:"hn-address-ed",searchType:"singleline, validate"},{country:"Honduras",iso3Code:"HND",iso2Code:"HN",datasetCode:"hn-address-eh",searchType:"autocomplete"},{country:"Hong Kong",iso3Code:"HKG",iso2Code:"HK",datasetCode:"hk-address-ed",searchType:"singleline, validate"},{country:"Hong Kong",iso3Code:"HKG",iso2Code:"HK",datasetCode:"hk-address-eh",searchType:"autocomplete"},{country:"Hungary",iso3Code:"HUN",iso2Code:"HU",datasetCode:"hu-address-ed",searchType:"singleline, validate"},{country:"Hungary",iso3Code:"HUN",iso2Code:"HU",datasetCode:"hu-address-eh",searchType:"autocomplete"},{country:"Iceland",iso3Code:"ISL",iso2Code:"IS",datasetCode:"is-address-ed",searchType:"singleline, validate"},{country:"Iceland",iso3Code:"ISL",iso2Code:"IS",datasetCode:"is-address-eh",searchType:"autocomplete"},{country:"India",iso3Code:"IND",iso2Code:"IN",datasetCode:"in-address-ed",searchType:"singleline, validate"},{country:"India",iso3Code:"IND",iso2Code:"IN",datasetCode:"in-address-eh",searchType:"autocomplete"},{country:"Indonesia",iso3Code:"IDN",iso2Code:"ID",datasetCode:"id-address-ed",searchType:"singleline, validate"},{country:"Indonesia",iso3Code:"IDN",iso2Code:"ID",datasetCode:"id-address-eh",searchType:"autocomplete"},{country:"Iran, Islamic Republic of",iso3Code:"IRN",iso2Code:"IR",datasetCode:"ir-address-ed",searchType:"singleline, validate"},{country:"Iran, Islamic Republic of",iso3Code:"IRN",iso2Code:"IR",datasetCode:"ir-address-eh",searchType:"autocomplete"},{country:"Iraq",iso3Code:"IRQ",iso2Code:"IQ",datasetCode:"iq-address-ed",searchType:"singleline, validate"},{country:"Iraq",iso3Code:"IRQ",iso2Code:"IQ",datasetCode:"iq-address-eh",searchType:"autocomplete"},{country:"Ireland",iso3Code:"IRL",iso2Code:"IE",datasetCode:"ie-address",searchType:"singleline, typedown"},{country:"Ireland",iso3Code:"IRL",iso2Code:"IE",datasetCode:"ie-address-ed",searchType:"singleline, validate"},{country:"Ireland",iso3Code:"IRL",iso2Code:"IE",datasetCode:"ie-address-eh",searchType:"autocomplete"},{country:"Ireland Eircode",iso3Code:"IRL",iso2Code:"IE",datasetCode:"ie-additional-eircode",searchType:"autocomplete"},{country:"Ireland ECAD",iso3Code:"IRL",iso2Code:"IE",datasetCode:"ie-address-ecad",searchType:"autocomplete"},{country:"Israel",iso3Code:"ISR",iso2Code:"IL",datasetCode:"il-address-ed",searchType:"singleline, validate"},{country:"Israel",iso3Code:"ISR",iso2Code:"IL",datasetCode:"il-address-eh",searchType:"autocomplete"},{country:"Italy",iso3Code:"ITA",iso2Code:"IT",datasetCode:"it-address-ed",searchType:"singleline, validate"},{country:"Italy",iso3Code:"ITA",iso2Code:"IT",datasetCode:"it-address-eh",searchType:"autocomplete"},{country:"Jamaica",iso3Code:"JAM",iso2Code:"JM",datasetCode:"jm-address-ed",searchType:"singleline, validate"},{country:"Jamaica",iso3Code:"JAM",iso2Code:"JM",datasetCode:"jm-address-eh",searchType:"autocomplete"},{country:"Japan",iso3Code:"JPN",iso2Code:"JP",datasetCode:"jp-address-ed",searchType:"singleline, validate"},{country:"Japan",iso3Code:"JPN",iso2Code:"JP",datasetCode:"jp-address",searchType:"singleline, validate"},{country:"Jordan",iso3Code:"JOR",iso2Code:"JO",datasetCode:"jo-address-ed",searchType:"singleline, validate"},{country:"Jordan",iso3Code:"JOR",iso2Code:"JO",datasetCode:"jo-address-eh",searchType:"autocomplete"},{country:"Kazakhstan",iso3Code:"KAZ",iso2Code:"KZ",datasetCode:"kz-address-ed",searchType:"singleline, validate"},{country:"Kazakhstan",iso3Code:"KAZ",iso2Code:"KZ",datasetCode:"kz-address-eh",searchType:"autocomplete"},{country:"Kenya",iso3Code:"KEN",iso2Code:"KE",datasetCode:"ke-address-ed",searchType:"singleline, validate"},{country:"Kenya",iso3Code:"KEN",iso2Code:"KE",datasetCode:"ke-address-eh",searchType:"autocomplete"},{country:"Kiribati",iso3Code:"KIR",iso2Code:"KI",datasetCode:"ki-address-ed",searchType:"singleline, validate"},{country:"Kiribati",iso3Code:"KIR",iso2Code:"KI",datasetCode:"ki-address-eh",searchType:"autocomplete"},{country:"Korea, Democratic People's Republic of",iso3Code:"PRK",iso2Code:"KP",datasetCode:"kp-address-ed",searchType:"singleline, validate"},{country:"Korea, Democratic People's Republic of",iso3Code:"PRK",iso2Code:"KP",datasetCode:"kp-address-eh",searchType:"autocomplete"},{country:"Korea, Republic of",iso3Code:"KOR",iso2Code:"KR",datasetCode:"kr-address-ed",searchType:"singleline, validate"},{country:"Korea, Republic of",iso3Code:"KOR",iso2Code:"KR",datasetCode:"kr-address-eh",searchType:"autocomplete"},{country:"Kosovo",iso3Code:"KOS",iso2Code:"XK",datasetCode:"kv-address-eh",searchType:"autocomplete"},{country:"Kuwait",iso3Code:"KWT",iso2Code:"KW",datasetCode:"kw-address-ed",searchType:"singleline, validate"},{country:"Kuwait",iso3Code:"KWT",iso2Code:"KW",datasetCode:"kw-address-eh",searchType:"autocomplete"},{country:"Kyrgyzstan",iso3Code:"KGZ",iso2Code:"KG",datasetCode:"kg-address-ed",searchType:"singleline, validate"},{country:"Kyrgyzstan",iso3Code:"KGZ",iso2Code:"KG",datasetCode:"kg-address-eh",searchType:"autocomplete"},{country:"Laos",iso3Code:"LAO",iso2Code:"LA",datasetCode:"la-address-ed",searchType:"singleline, validate"},{country:"Laos",iso3Code:"LAO",iso2Code:"LA",datasetCode:"la-address-eh",searchType:"autocomplete"},{country:"Latvia",iso3Code:"LVA",iso2Code:"LV",datasetCode:"lv-address-ed",searchType:"singleline, validate"},{country:"Latvia",iso3Code:"LVA",iso2Code:"LV",datasetCode:"lv-address-eh",searchType:"autocomplete"},{country:"Lebanon",iso3Code:"LBN",iso2Code:"LB",datasetCode:"lb-address-ed",searchType:"singleline, validate"},{country:"Lebanon",iso3Code:"LBN",iso2Code:"LB",datasetCode:"lb-address-eh",searchType:"autocomplete"},{country:"Lesotho",iso3Code:"LSO",iso2Code:"LS",datasetCode:"ls-address-ed",searchType:"singleline, validate"},{country:"Lesotho",iso3Code:"LSO",iso2Code:"LS",datasetCode:"ls-address-eh",searchType:"autocomplete"},{country:"Liberia",iso3Code:"LBR",iso2Code:"LR",datasetCode:"lr-address-ed",searchType:"singleline, validate"},{country:"Liberia",iso3Code:"LBR",iso2Code:"LR",datasetCode:"lr-address-eh",searchType:"autocomplete"},{country:"Libya",iso3Code:"LBY",iso2Code:"LY",datasetCode:"ly-address-ed",searchType:"singleline, validate"},{country:"Libya",iso3Code:"LBY",iso2Code:"LY",datasetCode:"ly-address-eh",searchType:"autocomplete"},{country:"Liechtenstein",iso3Code:"LIE",iso2Code:"LI",datasetCode:"li-address-ed",searchType:"singleline, validate"},{country:"Liechtenstein",iso3Code:"LIE",iso2Code:"LI",datasetCode:"li-address-eh",searchType:"autocomplete"},{country:"Lithuania",iso3Code:"LTU",iso2Code:"LT",datasetCode:"lt-address-ed",searchType:"singleline, validate"},{country:"Lithuania",iso3Code:"LTU",iso2Code:"LT",datasetCode:"lt-address-eh",searchType:"autocomplete"},{country:"Luxembourg",iso3Code:"LUX",iso2Code:"LU",datasetCode:"lu-address-ed",searchType:"singleline, validate"},{country:"Luxembourg",iso3Code:"LUX",iso2Code:"LU",datasetCode:"lu-address-eh",searchType:"autocomplete"},{country:"Macau",iso3Code:"MAC",iso2Code:"MO",datasetCode:"lv-address-ed",searchType:"singleline, validate"},{country:"Macau",iso3Code:"MAC",iso2Code:"MO",datasetCode:"lv-address-eh",searchType:"autocomplete"},{country:"Madagascar",iso3Code:"MDG",iso2Code:"MG",datasetCode:"mo-address-ed",searchType:"singleline, validate"},{country:"Madagascar",iso3Code:"MDG",iso2Code:"MG",datasetCode:"mo-address-eh",searchType:"autocomplete"},{country:"Malawi",iso3Code:"MWI",iso2Code:"MW",datasetCode:"mw-address-ed",searchType:"singleline, validate"},{country:"Malawi",iso3Code:"MWI",iso2Code:"MW",datasetCode:"mw-address-eh",searchType:"autocomplete"},{country:"Malaysia",iso3Code:"MYS",iso2Code:"MY",datasetCode:"my-address-ed",searchType:"singleline, validate"},{country:"Malaysia",iso3Code:"MYS",iso2Code:"MY",datasetCode:"my-address-eh",searchType:"autocomplete"},{country:"Maldives",iso3Code:"MDV",iso2Code:"MV",datasetCode:"mv-address-ed",searchType:"singleline, validate"},{country:"Maldives",iso3Code:"MDV",iso2Code:"MV",datasetCode:"mv-address-eh",searchType:"autocomplete"},{country:"Mali",iso3Code:"MLI",iso2Code:"ML",datasetCode:"ml-address-ed",searchType:"singleline, validate"},{country:"Mali",iso3Code:"MLI",iso2Code:"ML",datasetCode:"ml-address-eh",searchType:"autocomplete"},{country:"Malta",iso3Code:"MLT",iso2Code:"MT",datasetCode:"mt-address-ed",searchType:"singleline, validate"},{country:"Malta",iso3Code:"MLT",iso2Code:"MT",datasetCode:"mt-address-eh",searchType:"autocomplete"},{country:"Marshall Islands",iso3Code:"MHL",iso2Code:"MH",datasetCode:"mh-address-eh",searchType:"autocomplete"},{country:"Martinique",iso3Code:"MTQ",iso2Code:"MQ",datasetCode:"mq-address-eh",searchType:"autocomplete"},{country:"Mauritania",iso3Code:"MRT",iso2Code:"MR",datasetCode:"mr-address-ed",searchType:"singleline, validate"},{country:"Mauritania",iso3Code:"MRT",iso2Code:"MR",datasetCode:"mr-address-eh",searchType:"autocomplete"},{country:"Mauritius",iso3Code:"MUS",iso2Code:"MU",datasetCode:"mu-address-ed",searchType:"singleline, validate"},{country:"Mauritius",iso3Code:"MUS",iso2Code:"MU",datasetCode:"mu-address-eh",searchType:"autocomplete"},{country:"Mayotte",iso3Code:"MYT",iso2Code:"YT",datasetCode:"yt-address-eh",searchType:"autocomplete"},{country:"Mexico",iso3Code:"MEX",iso2Code:"MX",datasetCode:"mx-address-ed",searchType:"singleline, validate"},{country:"Mexico",iso3Code:"MEX",iso2Code:"MX",datasetCode:"mx-address-eh",searchType:"autocomplete"},{country:"Micronesia, Federated States of",iso3Code:"FSM",iso2Code:"FM",datasetCode:"fm-address-eh",searchType:"autocomplete"},{country:"Moldova",iso3Code:"MDA",iso2Code:"MD",datasetCode:"md-address-ed",searchType:"singleline, validate"},{country:"Moldova",iso3Code:"MDA",iso2Code:"MD",datasetCode:"md-address-eh",searchType:"autocomplete"},{country:"Monaco",iso3Code:"MCO",iso2Code:"MC",datasetCode:"mc-address-ed",searchType:"singleline, validate"},{country:"Monaco",iso3Code:"MCO",iso2Code:"MC",datasetCode:"mc-address-eh",searchType:"autocomplete"},{country:"Mongolia",iso3Code:"MNG",iso2Code:"MN",datasetCode:"mn-address-ed",searchType:"singleline, validate"},{country:"Mongolia",iso3Code:"MNG",iso2Code:"MN",datasetCode:"mn-address-eh",searchType:"autocomplete"},{country:"Montenegro",iso3Code:"MNE",iso2Code:"ME",datasetCode:"me-address-ed",searchType:"singleline, validate"},{country:"Montenegro",iso3Code:"MNE",iso2Code:"ME",datasetCode:"me-address-eh",searchType:"autocomplete"},{country:"Montserrat",iso3Code:"MSR",iso2Code:"MS",datasetCode:"ms-address-eh",searchType:"autocomplete"},{country:"Morocco",iso3Code:"MAR",iso2Code:"MA",datasetCode:"ma-address-ed",searchType:"singleline, validate"},{country:"Morocco",iso3Code:"MAR",iso2Code:"MA",datasetCode:"ma-address-eh",searchType:"autocomplete"},{country:"Mozambique",iso3Code:"MOZ",iso2Code:"MZ",datasetCode:"mz-address-ed",searchType:"singleline, validate"},{country:"Mozambique",iso3Code:"MOZ",iso2Code:"MZ",datasetCode:"mz-address-eh",searchType:"autocomplete"},{country:"Myanmar",iso3Code:"MMR",iso2Code:"MM",datasetCode:"mm-address-ed",searchType:"singleline, validate"},{country:"Myanmar",iso3Code:"MMR",iso2Code:"MM",datasetCode:"mm-address-eh",searchType:"autocomplete"},{country:"Namibia",iso3Code:"NAM",iso2Code:"NA",datasetCode:"na-address-ed",searchType:"singleline, validate"},{country:"Namibia",iso3Code:"NAM",iso2Code:"NA",datasetCode:"na-address-eh",searchType:"autocomplete"},{country:"Nauru",iso3Code:"NRU",iso2Code:"NR",datasetCode:"nr-address-ed",searchType:"singleline, validate"},{country:"Nauru",iso3Code:"NRU",iso2Code:"NR",datasetCode:"nr-address-eh",searchType:"autocomplete"},{country:"Nepal",iso3Code:"NPL",iso2Code:"NP",datasetCode:"np-address-ed",searchType:"singleline, validate"},{country:"Nepal",iso3Code:"NPL",iso2Code:"NP",datasetCode:"np-address-eh",searchType:"autocomplete"},{country:"Netherlands",iso3Code:"NLD",iso2Code:"NL",datasetCode:"nl-address-ed",searchType:"singleline, validate"},{country:"Netherlands",iso3Code:"NLD",iso2Code:"NL",datasetCode:"nl-address-eh",searchType:"autocomplete"},{country:"New Caledonia",iso3Code:"NCL",iso2Code:"NC",datasetCode:"nc-address-eh",searchType:"autocomplete"},{country:"New Zealand DataFusion",iso3Code:"NZL",iso2Code:"NZ",datasetCode:"nz-additional-datafusion",searchType:"autocomplete, singleline, typedown, validate"},{country:"New Zealand Postal Address",iso3Code:"NZL",iso2Code:"NZ",datasetCode:"nz-address",searchType:"autocomplete, singleline, typedown, validate"},{country:"Nicaragua",iso3Code:"NIC",iso2Code:"NI",datasetCode:"ni-address-ed",searchType:"singleline, validate"},{country:"Nicaragua",iso3Code:"NIC",iso2Code:"NI",datasetCode:"ni-address-eh",searchType:"autocomplete"},{country:"Niger",iso3Code:"NER",iso2Code:"NE",datasetCode:"ne-address-ed",searchType:"singleline, validate"},{country:"Niger",iso3Code:"NER",iso2Code:"NE",datasetCode:"ne-address-eh",searchType:"autocomplete"},{country:"Nigeria",iso3Code:"NGA",iso2Code:"NG",datasetCode:"ng-address-ed",searchType:"singleline, validate"},{country:"Nigeria",iso3Code:"NGA",iso2Code:"NG",datasetCode:"ng-address-eh",searchType:"autocomplete"},{country:"Niue",iso3Code:"NIU",iso2Code:"NU",datasetCode:"nu-address-ed",searchType:"singleline, validate"},{country:"Norfolk Island",iso3Code:"NFK",iso2Code:"NF",datasetCode:"nf-address-ed",searchType:"singleline, validate"},{country:"Norfolk Island",iso3Code:"NFK",iso2Code:"NF",datasetCode:"nf-address-eh",searchType:"autocomplete"},{country:"North Macedonia",iso3Code:"MKD",iso2Code:"MK",datasetCode:"mk-address-ed",searchType:"singleline, validate"},{country:"North Macedonia",iso3Code:"MKD",iso2Code:"MK",datasetCode:"mk-address-eh",searchType:"autocomplete"},{country:"Northern Mariana Islands",iso3Code:"MNP",iso2Code:"MP",datasetCode:"mp-address-eh",searchType:"autocomplete"},{country:"Norway",iso3Code:"NOR",iso2Code:"NO",datasetCode:"no-address-ed",searchType:"validate"},{country:"Norway",iso3Code:"NOR",iso2Code:"NO",datasetCode:"no-address-eh",searchType:"autocomplete"},{country:"Oman",iso3Code:"OMN",iso2Code:"OM",datasetCode:"om-address-ed",searchType:"singleline, validate"},{country:"Oman",iso3Code:"OMN",iso2Code:"OM",datasetCode:"om-address-eh",searchType:"autocomplete"},{country:"Pakistan",iso3Code:"PAK",iso2Code:"PK",datasetCode:"pk-address-ed",searchType:"singleline, validate"},{country:"Pakistan",iso3Code:"PAK",iso2Code:"PK",datasetCode:"pk-address-eh",searchType:"autocomplete"},{country:"Palau",iso3Code:"PLW",iso2Code:"PW",datasetCode:"pw-address-eh",searchType:"autocomplete"},{country:"Palestine",iso3Code:"PSE",iso2Code:"PS",datasetCode:"ps-address-eh",searchType:"autocomplete"},{country:"Panama",iso3Code:"PAN",iso2Code:"PA",datasetCode:"pa-address-ed",searchType:"singleline, validate"},{country:"Panama",iso3Code:"PAN",iso2Code:"PA",datasetCode:"pa-address-eh",searchType:"autocomplete"},{country:"Papua New Guinea",iso3Code:"PNG",iso2Code:"PG",datasetCode:"pg-address-ed",searchType:"singleline, validate"},{country:"Papua New Guinea",iso3Code:"PNG",iso2Code:"PG",datasetCode:"pg-address-eh",searchType:"autocomplete"},{country:"Paraguay",iso3Code:"PRY",iso2Code:"PY",datasetCode:"py-address-ed",searchType:"singleline, validate"},{country:"Paraguay",iso3Code:"PRY",iso2Code:"PY",datasetCode:"py-address-eh",searchType:"autocomplete"},{country:"Peru",iso3Code:"PER",iso2Code:"PE",datasetCode:"pe-address-ed",searchType:"singleline, validate"},{country:"Peru",iso3Code:"PER",iso2Code:"PE",datasetCode:"pe-address-eh",searchType:"autocomplete"},{country:"Philippines",iso3Code:"PHL",iso2Code:"PH",datasetCode:"ph-address-ed",searchType:"singleline, validate"},{country:"Philippines",iso3Code:"PHL",iso2Code:"PH",datasetCode:"ph-address-eh",searchType:"autocomplete"},{country:"Pitcairn Islands",iso3Code:"PCN",iso2Code:"PN",datasetCode:"pn-address-eh",searchType:"autocomplete"},{country:"Poland",iso3Code:"POL",iso2Code:"PL",datasetCode:"pl-address-ed",searchType:"singleline, validate"},{country:"Poland",iso3Code:"POL",iso2Code:"PL",datasetCode:"pl-address-eh",searchType:"autocomplete"},{country:"Portugal",iso3Code:"PRT",iso2Code:"PT",datasetCode:"pt-address-ed",searchType:"singleline, validate"},{country:"Portugal",iso3Code:"PRT",iso2Code:"PT",datasetCode:"pt-address-eh",searchType:"autocomplete"},{country:"Qatar",iso3Code:"QAT",iso2Code:"QA",datasetCode:"qa-address-ed",searchType:"singleline, validate"},{country:"Qatar",iso3Code:"QAT",iso2Code:"QA",datasetCode:"qa-address-eh",searchType:"autocomplete"},{country:"Romania",iso3Code:"ROU",iso2Code:"RO",datasetCode:"ro-address-ed",searchType:"singleline, validate"},{country:"Romania",iso3Code:"ROU",iso2Code:"RO",datasetCode:"ro-address-eh",searchType:"autocomplete"},{country:"Russian Federation",iso3Code:"RUS",iso2Code:"RU",datasetCode:"ru-address-ed",searchType:"singleline, validate"},{country:"Russian Federation",iso3Code:"RUS",iso2Code:"RU",datasetCode:"ru-address-eh",searchType:"autocomplete"},{country:"Rwanda",iso3Code:"RWA",iso2Code:"RW",datasetCode:"rw-address-ed",searchType:"singleline, validate"},{country:"Rwanda",iso3Code:"RWA",iso2Code:"RW",datasetCode:"rw-address-eh",searchType:"autocomplete"},{country:"Réunion",iso3Code:"REU",iso2Code:"RE",datasetCode:"re-address-eh",searchType:"autocomplete"},{country:"Saint Barthélemy",iso3Code:"BLM",iso2Code:"BL",datasetCode:"bl-address-eh",searchType:"autocomplete"},{country:"Saint Helena",iso3Code:"SHN",iso2Code:"SH",datasetCode:"sh-address-eh",searchType:"autocomplete"},{country:"Saint Kitts and Nevis",iso3Code:"KNA",iso2Code:"KN",datasetCode:"kn-address-ed",searchType:"singleline, validate"},{country:"Saint Kitts and Nevis",iso3Code:"KNA",iso2Code:"KN",datasetCode:"kn-address-eh",searchType:"autocomplete"},{country:"Saint Lucia",iso3Code:"LCA",iso2Code:"LC",datasetCode:"lc-address-eh",searchType:"autocomplete"},{country:"Saint Pierre and Miquelon",iso3Code:"SPM",iso2Code:"PM",datasetCode:"pm-address-eh",searchType:"autocomplete"},{country:"Saint Vincent and the Grenadines",iso3Code:"VCT",iso2Code:"VC",datasetCode:"vc-address-ed",searchType:"singleline, validate"},{country:"Saint Vincent and the Grenadines",iso3Code:"VCT",iso2Code:"VC",datasetCode:"vc-address-eh",searchType:"autocomplete"},{country:"Samoa",iso3Code:"WSM",iso2Code:"WS",datasetCode:"ws-address-ed",searchType:"singleline, validate"},{country:"Samoa",iso3Code:"WSM",iso2Code:"WS",datasetCode:"ws-address-eh",searchType:"autocomplete"},{country:"San Marino",iso3Code:"SMR",iso2Code:"SM",datasetCode:"sm-address-ed",searchType:"singleline, validate"},{country:"San Marino",iso3Code:"SMR",iso2Code:"SM",datasetCode:"sm-address-eh",searchType:"autocomplete"},{country:"Sao Tome and Principe",iso3Code:"STP",iso2Code:"ST",datasetCode:"st-address-ed",searchType:"singleline, validate"},{country:"Sao Tome and Principe",iso3Code:"STP",iso2Code:"ST",datasetCode:"st-address-eh",searchType:"autocomplete"},{country:"Saudi Arabia",iso3Code:"SAU",iso2Code:"SA",datasetCode:"sa-address-ed",searchType:"singleline, validate"},{country:"Saudi Arabia",iso3Code:"SAU",iso2Code:"SA",datasetCode:"sa-address-eh",searchType:"autocomplete"},{country:"Senegal",iso3Code:"SEN",iso2Code:"SN",datasetCode:"sn-address-ed",searchType:"singleline, validate"},{country:"Senegal",iso3Code:"SEN",iso2Code:"SN",datasetCode:"sn-address-eh",searchType:"autocomplete"},{country:"Serbia",iso3Code:"SRB",iso2Code:"RS",datasetCode:"rs-address-ed",searchType:"singleline, validate"},{country:"Serbia",iso3Code:"SRB",iso2Code:"RS",datasetCode:"rs-address-eh",searchType:"autocomplete"},{country:"Seychelles",iso3Code:"SYC",iso2Code:"SC",datasetCode:"sc-address-ed",searchType:"singleline, validate"},{country:"Seychelles",iso3Code:"SYC",iso2Code:"SC",datasetCode:"sc-address-eh",searchType:"autocomplete"},{country:"Sierra Leone",iso3Code:"SLE",iso2Code:"SL",datasetCode:"sl-address-ed",searchType:"singleline, validate"},{country:"Sierra Leone",iso3Code:"SLE",iso2Code:"SL",datasetCode:"sl-address-eh",searchType:"autocomplete"},{country:"Singapore",iso3Code:"SGP",iso2Code:"SG",datasetCode:"sg-address",searchType:"autocomplete, singleline, typedown, validate"},{country:"Sint Maarten",iso3Code:"SXM",iso2Code:"SX",datasetCode:"sx-address-ed",searchType:"singleline, validate"},{country:"Sint Maarten",iso3Code:"SXM",iso2Code:"SX",datasetCode:"sx-address-eh",searchType:"autocomplete"},{country:"Slovakia",iso3Code:"SVK",iso2Code:"SK",datasetCode:"sk-address-ed",searchType:"singleline, validate"},{country:"Slovakia",iso3Code:"SVK",iso2Code:"SK",datasetCode:"sk-address-eh",searchType:"autocomplete"},{country:"Slovenia",iso3Code:"SVN",iso2Code:"SI",datasetCode:"si-address-ed",searchType:"singleline, validate"},{country:"Slovenia",iso3Code:"SVN",iso2Code:"SI",datasetCode:"si-address-eh",searchType:"autocomplete"},{country:"Solomon Islands",iso3Code:"SLB",iso2Code:"SB",datasetCode:"sb-address-ed",searchType:"singleline, validate"},{country:"Solomon Islands",iso3Code:"SLB",iso2Code:"SB",datasetCode:"sb-address-eh",searchType:"autocomplete"},{country:"Somalia",iso3Code:"SOM",iso2Code:"SO",datasetCode:"so-address-ed",searchType:"singleline, validate"},{country:"Somalia",iso3Code:"SOM",iso2Code:"SO",datasetCode:"so-address-eh",searchType:"autocomplete"},{country:"South Africa",iso3Code:"ZAF",iso2Code:"ZA",datasetCode:"za-address-ed",searchType:"singleline, validate"},{country:"South Africa",iso3Code:"ZAF",iso2Code:"ZA",datasetCode:"za-address-eh",searchType:"autocomplete"},{country:"South Georgia and the South Sandwich Islands",iso3Code:"SGS",iso2Code:"GS",datasetCode:"gs-address-eh",searchType:"autocomplete"},{country:"South Sudan",iso3Code:"SSD",iso2Code:"SS",datasetCode:"ss-address-ed",searchType:"singleline, validate"},{country:"South Sudan",iso3Code:"SSD",iso2Code:"SS",datasetCode:"ss-address-eh",searchType:"autocomplete"},{country:"Spain",iso3Code:"ESP",iso2Code:"ES",datasetCode:"es-address",searchType:"singleline, typedown"},{country:"Spain",iso3Code:"ESP",iso2Code:"ES",datasetCode:"es-address-ed",searchType:"validate"},{country:"Spain",iso3Code:"ESP",iso2Code:"ES",datasetCode:"es-address-eh",searchType:"autocomplete"},{country:"Sri Lanka",iso3Code:"LKA",iso2Code:"LK",datasetCode:"lk-address-ed",searchType:"singleline, validate"},{country:"Sudan",iso3Code:"SDN",iso2Code:"SD",datasetCode:"sd-address-ed",searchType:"singleline, validate"},{country:"Sudan",iso3Code:"SDN",iso2Code:"SD",datasetCode:"sd-address-eh",searchType:"autocomplete"},{country:"Suriname",iso3Code:"SUR",iso2Code:"SR",datasetCode:"sr-address-ed",searchType:"singleline, validate"},{country:"Suriname",iso3Code:"SUR",iso2Code:"SR",datasetCode:"sr-address-eh",searchType:"autocomplete"},{country:"Svalbard and Jan Mayen Islands",iso3Code:"SJM",iso2Code:"SJ",datasetCode:"sj-address-eh",searchType:"autocomplete"},{country:"Swaziland (Eswatini)",iso3Code:"SWZ",iso2Code:"SZ",datasetCode:"sz-address-ed",searchType:"singleline, validate"},{country:"Swaziland (Eswatini)",iso3Code:"SWZ",iso2Code:"SZ",datasetCode:"sz-address-eh",searchType:"autocomplete"},{country:"Sweden",iso3Code:"SWE",iso2Code:"SE",datasetCode:"se-address",searchType:"singleline, typedown"},{country:"Sweden",iso3Code:"SWE",iso2Code:"SE",datasetCode:"se-address-ed",searchType:"validate"},{country:"Sweden",iso3Code:"SWE",iso2Code:"SE",datasetCode:"se-address-eh",searchType:"autocomplete"},{country:"Switzerland",iso3Code:"CHE",iso2Code:"CH",datasetCode:"ch-address",searchType:"singleline, typedown"},{country:"Switzerland",iso3Code:"CHE",iso2Code:"CH",datasetCode:"ch-address-ed",searchType:"validate"},{country:"Switzerland",iso3Code:"CHE",iso2Code:"CH",datasetCode:"ch-address-eh",searchType:"autocomplete"},{country:"Syria",iso3Code:"SYR",iso2Code:"SY",datasetCode:"sy-address-ed",searchType:"singleline, validate"},{country:"Syria",iso3Code:"SYR",iso2Code:"SY",datasetCode:"sy-address-eh",searchType:"autocomplete"},{country:"Taiwan",iso3Code:"TWN",iso2Code:"TW",datasetCode:"tw-address-ed",searchType:"singleline, validate"},{country:"Taiwan",iso3Code:"TWN",iso2Code:"TW",datasetCode:"tw-address-eh",searchType:"autocomplete"},{country:"Tajikistan",iso3Code:"TJK",iso2Code:"TJ",datasetCode:"tj-address-ed",searchType:"singleline, validate"},{country:"Tajikistan",iso3Code:"TJK",iso2Code:"TJ",datasetCode:"tj-address-eh",searchType:"autocomplete"},{country:"Tanzania",iso3Code:"TZA",iso2Code:"TZ",datasetCode:"tz-address-ed",searchType:"singleline, validate"},{country:"Tanzania",iso3Code:"TZA",iso2Code:"TZ",datasetCode:"tz-address-eh",searchType:"autocomplete"},{country:"Thailand",iso3Code:"THA",iso2Code:"TH",datasetCode:"th-address-ed",searchType:"singleline, validate"},{country:"Thailand",iso3Code:"THA",iso2Code:"TH",datasetCode:"th-address-eh",searchType:"autocomplete"},{country:"Timor-Leste",iso3Code:"TLS",iso2Code:"TL",datasetCode:"tl-address-ed",searchType:"singleline, validate"},{country:"Timor-Leste",iso3Code:"TLS",iso2Code:"TL",datasetCode:"tl-address-eh",searchType:"autocomplete"},{country:"Togo",iso3Code:"TGO",iso2Code:"TG",datasetCode:"tg-address-ed",searchType:"singleline, validate"},{country:"Togo",iso3Code:"TGO",iso2Code:"TG",datasetCode:"tg-address-eh",searchType:"autocomplete"},{country:"Tokelau",iso3Code:"TKL",iso2Code:"TK",datasetCode:"tk-address-ed",searchType:"singleline, validate"},{country:"Tokelau",iso3Code:"TKL",iso2Code:"TK",datasetCode:"tk-address-eh",searchType:"autocomplete"},{country:"Tonga",iso3Code:"TON",iso2Code:"TO",datasetCode:"to-address-ed",searchType:"singleline, validate"},{country:"Tonga",iso3Code:"TON",iso2Code:"TO",datasetCode:"to-address-eh",searchType:"autocomplete"},{country:"Trinidad and Tobago",iso3Code:"TTO",iso2Code:"TT",datasetCode:"tt-address-ed",searchType:"singleline, validate"},{country:"Trinidad and Tobago",iso3Code:"TTO",iso2Code:"TT",datasetCode:"tt-address-eh",searchType:"autocomplete"},{country:"Tunisia",iso3Code:"TUN",iso2Code:"TN",datasetCode:"tn-address-ed",searchType:"singleline, validate"},{country:"Tunisia",iso3Code:"TUN",iso2Code:"TN",datasetCode:"tn-address-eh",searchType:"autocomplete"},{country:"Turkey",iso3Code:"TUR",iso2Code:"TR",datasetCode:"tr-address-ed",searchType:"singleline, validate"},{country:"Turkey",iso3Code:"TUR",iso2Code:"TR",datasetCode:"tr-address-eh",searchType:"autocomplete"},{country:"Turkish Republic of Northern Cyprus",iso3Code:"NCY",iso2Code:"CY",datasetCode:"ny-address-eh",searchType:"autocomplete"},{country:"Turkmenistan",iso3Code:"TKM",iso2Code:"TM",datasetCode:"tm-address-ed",searchType:"singleline, validate"},{country:"Turkmenistan",iso3Code:"TKM",iso2Code:"TM",datasetCode:"tm-address-eh",searchType:"autocomplete"},{country:"Turks and Caicos Islands",iso3Code:"TCA",iso2Code:"TC",datasetCode:"tc-address-eh",searchType:"autocomplete"},{country:"Tuvalu",iso3Code:"TUV",iso2Code:"TV",datasetCode:"tv-address-ed",searchType:"singleline, validate"},{country:"Tuvalu",iso3Code:"TUV",iso2Code:"TV",datasetCode:"tv-address-eh",searchType:"autocomplete"},{country:"Uganda",iso3Code:"UGA",iso2Code:"UG",datasetCode:"ug-address-ed",searchType:"singleline, validate"},{country:"Uganda",iso3Code:"UGA",iso2Code:"UG",datasetCode:"ug-address-eh",searchType:"autocomplete"},{country:"Ukraine",iso3Code:"UKR",iso2Code:"UA",datasetCode:"ua-address-ed",searchType:"singleline, validate"},{country:"Ukraine",iso3Code:"UKR",iso2Code:"UA",datasetCode:"ua-address-eh",searchType:"autocomplete"},{country:"United Arab Emirates",iso3Code:"ARE",iso2Code:"AE",datasetCode:"ae-address-ed",searchType:"singleline, validate"},{country:"United Arab Emirates",iso3Code:"ARE",iso2Code:"AE",datasetCode:"ae-address-eh",searchType:"autocomplete"},{country:"United Kingdom",iso3Code:"GBR",iso2Code:"GB",datasetCode:["gb-address"],searchType:"autocomplete, lookupv2"},{country:"United Kingdom",iso3Code:"GBR",iso2Code:"GB",datasetCode:["gb-additional-business","gb-additional-multipleresidence","gb-additional-notyetbuilt"],searchType:"singleline"},{country:"United Kingdom AddressBase Premium",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-address-addressbase",searchType:"singleline, typedown, validate, lookup"},{country:"United Kingdom AddressBase Premium with Islands",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-addressbaseislands",searchType:"singleline, typedown, validate, lookup"},{country:"United Kingdom Business Names",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-business",searchType:"singleline, typedown"},{country:"United Kingdom Electricity",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-electricity",searchType:"singleline, typedown, validate, lookup"},{country:"United Kingdom Gas",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-gas",searchType:"singleline, typedown, validate, lookup"},{country:"United Kingdom Street Level",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-address-streetlevel",searchType:"singleline, typedown"},{country:"United Kingdom Extended Business",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-businessextended",searchType:"singleline, typedown, validate, lookup"},{country:"United Kingdom Cymraeg (Welsh Language) Postal Address",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-address-wales",searchType:"singleline, typedown, validate"},{country:"United States of America",iso3Code:"USA",iso2Code:"US",datasetCode:"us-address",searchType:"autocomplete, singleline, typedown, validate"},{country:"Uruguay",iso3Code:"URY",iso2Code:"UY",datasetCode:"uy-address-ed",searchType:"singleline, validate"},{country:"Uruguay",iso3Code:"URY",iso2Code:"UY",datasetCode:"uy-address-eh",searchType:"autocomplete"},{country:"Uzbekistan",iso3Code:"UZB",iso2Code:"UZ",datasetCode:"uz-address-ed",searchType:"singleline, validate"},{country:"Uzbekistan",iso3Code:"UZB",iso2Code:"UZ",datasetCode:"uz-address-eh",searchType:"autocomplete"},{country:"Vanuatu",iso3Code:"VUT",iso2Code:"VU",datasetCode:"vu-address-ed",searchType:"singleline, validate"},{country:"Vanuatu",iso3Code:"VUT",iso2Code:"VU",datasetCode:"vu-address-eh",searchType:"autocomplete"},{country:"Vatican City (Holy See)",iso3Code:"VAT",iso2Code:"VA",datasetCode:"va-address-ed",searchType:"singleline, validate"},{country:"Vatican City (Holy See)",iso3Code:"VAT",iso2Code:"VA",datasetCode:"va-address-eh",searchType:"autocomplete"},{country:"Venezuela",iso3Code:"VEN",iso2Code:"VE",datasetCode:"ve-address-ed",searchType:"singleline, validate"},{country:"Venezuela",iso3Code:"VEN",iso2Code:"VE",datasetCode:"ve-address-eh",searchType:"autocomplete"},{country:"Viet Nam",iso3Code:"VNM",iso2Code:"VN",datasetCode:"vn-address-ed",searchType:"singleline, validate"},{country:"Viet Nam",iso3Code:"VNM",iso2Code:"VN",datasetCode:"vn-address-eh",searchType:"autocomplete"},{country:"Virgin Islands, British",iso3Code:"VGB",iso2Code:"VG",datasetCode:"vg-address-eh",searchType:"autocomplete"},{country:"Virgin Islands, U.S.",iso3Code:"VIR",iso2Code:"VI",datasetCode:"vi-address-eh",searchType:"autocomplete"},{country:"Wallis and Futuna Islands",iso3Code:"WLF",iso2Code:"WF",datasetCode:"wf-address-eh",searchType:"autocomplete"},{country:"Western Sahara",iso3Code:"ESH",iso2Code:"EH",datasetCode:"eh-address-ed",searchType:"singleline, validate"},{country:"Western Sahara",iso3Code:"ESH",iso2Code:"EH",datasetCode:"eh-address-eh",searchType:"autocomplete"},{country:"Yemen",iso3Code:"YEM",iso2Code:"YE",datasetCode:"ye-address-ed",searchType:"singleline, validate"},{country:"Yemen",iso3Code:"YEM",iso2Code:"YE",datasetCode:"ye-address-eh",searchType:"autocomplete"},{country:"Zambia",iso3Code:"ZMB",iso2Code:"ZM",datasetCode:"zm-address-ed",searchType:"singleline, validate"},{country:"Zambia",iso3Code:"ZMB",iso2Code:"ZM",datasetCode:"zm-address-eh",searchType:"autocomplete"},{country:"Zimbabwe",iso3Code:"ZWE",iso2Code:"ZW",datasetCode:"zw-address-ed",searchType:"singleline, validate"},{country:"Zimbabwe",iso3Code:"ZWE",iso2Code:"ZW",datasetCode:"zw-address-eh",searchType:"autocomplete"}],n={en:{gbr:{locality:"Town/City",region:"County",postal_code:"Post code"},usa:{locality:"City",region:"State",postal_code:"ZIP code"}}},c=function(){this.size=0,this.maxSuggestions=25},l=function(){function o(s){var t=this;this.baseUrl="https://api.experianaperture.io/",this.searchEndpoint="address/search/v1",this.lookupEndpoint="address/lookup/v2",this.validateEndpoint="address/validate/v1",this.promptsetEndpoint="address/promptsets/v1",this.stepInEndpoint="address/suggestions/stepin/v1",this.refineEndpoint="address/suggestions/refine/v1",this.enrichmentEndpoint="enrichment/v2",this.poweredByLogo={element:null,create:function(e){var s={text:"".concat(this.svg," Powered by Experian"),format:""},t=e.createListItem(s);return t.classList.add("powered-by-experian"),e.list.parentNode.appendChild(t),t},destroy:function(e){this.element&&(e.list.parentNode.removeChild(this.element),this.element=void 0)},svg:''},this.result={formattedAddressContainer:null,lastAddressField:null,generateAddressLineRequired:!1,show:function(s){if(t.searchSpinner.hide(),t.picklist.hide(),t.lastSearchTerm="",t.searchType===e.AUTOCOMPLETE||s.result.address&&"No matches"!==s.result.confidence){t.inputs.forEach((function(e){return e.value=""})),t.result.calculateIfAddressLineGenerationRequired(),t.result.formattedAddressContainer=t.options.elements.formattedAddressContainer,!t.result.formattedAddressContainer&&t.result.generateAddressLineRequired&&t.result.createFormattedAddressContainer();for(var o=0;o0)for(var s=0;s?/";:£§º©®\s]+[.。。・・︒។։။۔።।][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+[.。。・・︒។։။۔።।][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+|[^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+([\u0020\u00A0][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+){1,3}[.。。・・︒។։။۔።।][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+([\u0020\u00A0][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+){1,3}[.。。・・︒។։။۔።।][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+([\u0020\u00A0][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+){1,3})$/;i.test(this.currentSearchTerm.trim())&&(this.avMode=s.WHAT3WORDS,this.currentSearchTerm=this.currentSearchTerm.trim()),(i=/^\d{12}|\d{8}$/).test(this.currentSearchTerm.trim())&&(this.avMode=s.UDPRN,this.currentSearchTerm=this.currentSearchTerm.trim()),this.events.trigger("pre-search",this.currentSearchTerm),this.lastSearchTerm=this.currentSearchTerm,this.searchSpinner.hide(),this.searchSpinner.show();var r=void 0,n=void 0,c=void 0,l=void 0;switch(this.avMode){case s.WHAT3WORDS:l=this.generateLookupDataForApiCall(this.getWhat3WordsLookupValue(this.currentSearchTerm,!0),t.WHAT3WORDS),r=this.baseUrl+this.lookupEndpoint,n=[],c=this.picklist.showWhat3Words;break;case s.UDPRN:l=this.generateLookupDataForApiCall(this.currentSearchTerm,t.UDPRN),r=this.baseUrl+this.lookupEndpoint,n=[{key:"Add-Addresses",value:!0}],c=this.picklist.showLookup;break;default:l=this.generateSearchDataForApiCall(),r=this.baseUrl+(this.searchType===e.VALIDATE?this.validateEndpoint:this.searchEndpoint),n=this.searchType===e.VALIDATE?[{key:"Add-Metadata",value:!0}]:[],c=this.searchType===e.VALIDATE?this.result.handleValidateResponse:this.picklist.show}this.request.send(r,"POST",c,l,n)}else this.lastSearchTerm!==this.currentSearchTerm&&this.picklist.hide()},o.prototype.getKey=function(e){var s=e.key;switch(s){case"Down":case"ArrowDown":return"ArrowDown";case"Up":case"ArrowUp":return"ArrowUp";case"Spacebar":case" ":return" ";case"Escape":case"Esc":return"Escape";default:return s}},o.prototype.canSearch=function(){return this.options.enabled&&""!==this.currentSearchTerm&&this.currentSearchTerm.length>3&&this.lastSearchTerm!==this.currentSearchTerm&&this.currentCountryCode&&!0===this.hasSearchInputBeenReset},o.prototype.createPicklist=function(){var s=this;this.picklist=new c,this.picklist.maxSuggestions=25,this.picklist.tabCount=-1,this.picklist.show=function(t){var o;s.picklist.items=null==t?void 0:t.result.suggestions,s.picklist.handleCommonShowPicklistLogic(),(null===(o=s.picklist.items)||void 0===o?void 0:o.length)>0?(s.picklist.refine.isNeeded(t)&&s.picklist.refine.createInput(t.result.suggestions_prompt,t.result.suggestions_key),s.searchType===e.VALIDATE&&s.picklist.displaySuggestionsHeader(),s.picklist.items.forEach((function(e){var t=s.picklist.createListItem(e);s.picklist.list.appendChild(t),s.picklist.listen(t)})),s.searchType===e.VALIDATE&&s.picklist.displayUseAddressEnteredFooter(),s.picklist.scrollIntoViewIfNeeded()):s.picklist.handleEmptyPicklist(t),s.poweredByLogo.element=s.poweredByLogo.element||s.poweredByLogo.create(s.picklist),s.events.trigger("post-picklist-create",s.picklist.items)},this.picklist.showWhat3Words=function(e){var t;s.picklist.what3wordsItems=null==e?void 0:e.result.suggestions,s.picklist.handleCommonShowPicklistLogic(),(null===(t=s.picklist.what3wordsItems)||void 0===t?void 0:t.length)>0?(s.picklist.what3wordsItems.forEach((function(e){var t=s.picklist.createWhat3WordsListItem(e);s.picklist.list.appendChild(t),s.picklist.listen(t)})),s.picklist.scrollIntoViewIfNeeded()):s.picklist.handleEmptyPicklist(e),s.poweredByLogo.element=s.poweredByLogo.element||s.poweredByLogo.create(s.picklist),s.events.trigger("post-picklist-create",s.picklist.items)},this.picklist.showLookup=function(e){var t;s.picklist.lookupItems=null==e?void 0:e.result.addresses,s.picklist.handleCommonShowPicklistLogic(),(null===(t=s.picklist.lookupItems)||void 0===t?void 0:t.length)>0?(s.picklist.lookupItems.forEach((function(e){var t=s.picklist.createLookupListItem(e);s.picklist.list.appendChild(t),s.picklist.listen(t)})),s.picklist.scrollIntoViewIfNeeded()):s.picklist.handleEmptyPicklist(e),s.poweredByLogo.element=s.poweredByLogo.element||s.poweredByLogo.create(s.picklist),s.events.trigger("post-picklist-create",s.picklist.items)},this.picklist.handleCommonShowPicklistLogic=function(){var e;s.picklist.currentItem=null,s.picklist.size=null===(e=s.picklist.items)||void 0===e?void 0:e.length,s.picklist.resetTabCount(),s.searchSpinner.hide(),s.picklist.list=s.picklist.list||s.picklist.createList(),s.picklist.list.innerHTML="",s.picklist.useAddressEntered.destroy(),s.events.trigger("pre-picklist-create",s.picklist.items)},this.picklist.hide=function(){if(s.picklist.currentItem=null,s.picklist.useAddressEntered.destroy(),s.poweredByLogo.destroy(s.picklist),s.inputs){var t=s.searchType===e.SINGLELINE?s.inputs.length-1:0;s.inputs[t].classList.remove("showing-suggestions")}s.picklist.list&&(s.picklist.container.remove(),s.picklist.list=void 0)},this.picklist.handleEmptyPicklist=function(e){var t;s.picklist.useAddressEntered.element=s.picklist.useAddressEntered.element||s.picklist.useAddressEntered.create(null===(t=e.result)||void 0===t?void 0:t.confidence),s.picklist.scrollIntoViewIfNeeded(),"function"==typeof s.picklist.handleEmptyPicklistCallback&&s.picklist.handleEmptyPicklistCallback()},this.picklist.displaySuggestionsHeader=function(){var e=document.querySelector(".picklist-suggestions-header")||document.createElement("div");e.classList.add("picklist-suggestions-header"),e.innerText="Suggestions:",s.picklist.list.parentNode.insertBefore(e,s.picklist.list)},this.picklist.displayUseAddressEnteredFooter=function(){var e=document.querySelector(".picklist-use-entered-container")||document.createElement("div");e.classList.add("picklist-use-entered-container"),s.picklist.list.parentNode.insertBefore(e,s.picklist.list.nextElementSibling);var t=document.querySelector(".picklist-use-entered-header")||document.createElement("div");t.classList.add("picklist-use-entered-header"),t.innerText="Or use address entered:",e.appendChild(t);var o=document.querySelector(".picklist-use-entered-option")||document.createElement("div");o.classList.add("picklist-use-entered-option"),o.innerText=s.currentSearchTerm.replace(/,+/g,", "),o.addEventListener("click",s.picklist.useAddressEntered.click),e.appendChild(o)},this.picklist.scrollIntoViewIfNeeded=function(){var e=s.picklist.container.getBoundingClientRect().top<0,t=s.picklist.container.getBoundingClientRect().bottom>window.innerHeight;(e||t)&&s.picklist.container.scrollIntoView()},this.picklist.useAddressEntered={element:null,create:function(e){var t={text:"".concat(e," ").concat(s.options.useAddressEnteredText)},o=s.picklist.createListItem(t);return o.classList.add("use-address-entered"),o.setAttribute("title","Enter address manually"),s.picklist.list=s.picklist.list||s.picklist.createList(),s.picklist.list.parentNode.insertBefore(o,s.picklist.container.firstChild),o.addEventListener("click",s.picklist.useAddressEntered.click),o},destroy:function(){s.picklist.useAddressEntered.element&&(s.picklist.list.parentNode.removeChild(s.picklist.useAddressEntered.element),s.picklist.useAddressEntered.element=void 0)},click:function(){var e={result:{confidence:"No matches",address:{address_line_1:"",address_line_2:"",address_line_3:"",locality:"",region:"",postal_code:"",country:""}}};if(s.currentSearchTerm){var t=s.currentSearchTerm.split(",");t[0]&&(e.result.address.address_line_1=t[0]),t[1]&&(e.result.address.address_line_2=t[1]),t[2]&&(e.result.address.address_line_3=t[2]);for(var o=3;oa.length-1&&(s.picklist.tabCount=0,t=!0);var d=a[s.picklist.tabCount],i=s.picklist.list.querySelector(".selected");i&&i.classList.remove("selected"),d.classList.add("selected"),s.picklist.currentItem=d;var r=s.picklist.list.offsetTop,n=s.picklist.list.offsetTop+s.picklist.list.offsetHeight,c=s.picklist.list.scrollTop,l=d.offsetTop,C=d.offsetTop+d.offsetHeight,u=d.offsetHeight;t?s.picklist.list.scrollTop=0:o?s.picklist.list.scrollTop=999:C+u>n?s.picklist.list.scrollTop=c+u:l-u-r";t=t.substring(0,s[o][0])+a+t.substring(s[o][1])}return t},this.picklist.listen=function(e){e.addEventListener("click",s.picklist.pick.bind(null,e))},this.picklist.checkEnter=function(e){if("Enter"===e.key||"Tab"===e.key){var t=void 0;1===s.picklist.size?t=s.picklist.list.querySelectorAll("div")[0]:s.picklist.currentItem&&(t=s.picklist.currentItem),t&&s.picklist.pick(t)}},this.picklist.pick=function(e){if(s.events.trigger("post-picklist-selection",e),e.classList.contains(t.WHAT3WORDS)){var o=e.getElementsByTagName("div");s.lookup(o[0].innerHTML)}else e.getAttribute("format")?s.format(e.getAttribute("format")):s.refine(e.getAttribute("refine"))}},o.prototype.format=function(e){this.events.trigger("pre-formatting-search",e),this.searchSpinner.hide(),this.request.send(e,"GET",this.result.show,void 0,[{key:"Add-Metadata",value:!0}])},o.prototype.refine=function(e){this.events.trigger("pre-refinement",e),this.searchSpinner.hide(),this.request.send("".concat(this.baseUrl).concat(this.stepInEndpoint,"/").concat(e),"GET",this.picklist.show)},o.prototype.lookup=function(e){this.events.trigger("pre-lookup",e),this.searchSpinner.hide();var s=this.generateLookupDataForApiCall(e,t.WHAT3WORDS),o=this.baseUrl+this.lookupEndpoint,a=this.picklist.showLookup;this.request.send(o,"POST",a,s,[{key:"Add-Addresses",value:!0}])},o.prototype.checkTab=function(e){var s=this.getKey(e);"Tab"!==s?"Enter"===s&&e.preventDefault():this.picklist.keyup(e)},o.prototype.toggleSearchInputs=function(e){var s,t,o,a="show"===e?"remove":"add";null===(s=this.options.elements.inputs)||void 0===s||s.forEach((function(e){return e.parentNode.querySelectorAll(".toggle").forEach((function(e){return e.classList[a]("hidden")}))})),null===(t=this.options.elements.countryList)||void 0===t||t.parentNode.querySelectorAll(".toggle").forEach((function(e){return e.classList[a]("hidden")})),null===(o=this.options.elements.lookupButton)||void 0===o||o.parentNode.querySelectorAll(".toggle").forEach((function(e){return e.classList[a]("hidden")}))},o.prototype.globalReset=function(e){e&&e.preventDefault(),this.options.enabled=!0,this.result.hide(),this.hasSearchInputBeenReset=!0,this.inputs.forEach((function(e){return e.value=""})),this.picklist.hide(),this.toggleSearchInputs("show"),this.inputs[0].focus(),this.avMode=s.SEARCH,this.events.trigger("post-reset")},o.prototype.isInternationalValidation=function(){return!(this.searchType!==e.VALIDATE||Array.isArray(this.currentDataSet)||!this.currentDataSet.toUpperCase().endsWith("-ED"))},o}();window.AddressValidation=l}(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QixRQUFTLFNBQVVDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQy9GLENBQUNrQixRQUFTLFNBQVVDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQy9GLENBQUNrQixRQUFTLGFBQWNDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQ25HLENBQUNrQixRQUFTLGFBQWNDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQ25HLENBQUNrQixRQUFTLE9BQVFDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQzdGLENBQUNrQixRQUFTLE9BQVFDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQzdGLENBQUNrQixRQUFTLFNBQVVDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQy9GLENBQUNrQixRQUFTLFNBQVVDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQy9GLENBQUNrQixRQUFTLFVBQVdDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQ2hHLENBQUNrQixRQUFTLFVBQVdDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQ2hHLENBQUNrQixRQUFTLFVBQVdDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQ2hHLENBQUNrQixRQUFTLFVBQVdDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQ2hHLENBQUNrQixRQUFTLFVBQVdDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQ2hHLENBQUNrQixRQUFTLFVBQVdDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdC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LEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSxnQkFDbkcsQ0FBQ2tCLFFBQVMsVUFBV0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSx3QkFDaEcsQ0FBQ2tCLFFBQVMsVUFBV0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSxnQkFDaEcsQ0FBQ2tCLFFBQVMsYUFBY0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSx3QkFDbkcsQ0FBQ2tCLFFBQVMsYUFBY0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSxnQkFDbkcsQ0FBQ2tCLFFBQVMsVUFBV0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSx3QkFDaEcsQ0FBQ2tCLFFBQVMsVUFBV0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSxnQkFDaEcsQ0FBQ2tCLFFBQVMsVUFBV0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSx3QkFDaEcsQ0FBQ2tCLFFBQVMsVUFBV0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSxnQkFDaEcsQ0FBQ2tCLFFBQVMsUUFBU0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSx3QkFDOUYsQ0FBQ2tCLFFBQVMsUUFBU0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSxnQkFDOUYsQ0FBQ2tCLFFBQVMsUUFBU0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSx3QkFDOUYsQ0FBQ2tCLFFBQVMsUUFBU0MsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSxnQkFDOUYsQ0FBQ2tCLFFBQVMsY0FBZUMsU0FBVSxNQUFPQyxTQUFVLEtBQU1DLFlBQWEsZ0JBQWlCckIsV0FBWSx3QkFDcEcsQ0FBQ2tCLFFB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VSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQy9GLENBQUNrQixRQUFTLGFBQWNDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQ25HLENBQUNrQixRQUFTLGFBQWNDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQ25HLENBQUNrQixRQUFTLFdBQVlDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQ2pHLENBQUNrQixRQUFTLFdBQVlDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQ2pHLENBQUNrQixRQUFTLFdBQVlDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQ2pHLENBQUNrQixRQUFTLFdBQVlDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQ2pHLENBQUNrQixRQUFTLGNBQWVDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQ3BHLENBQUNrQixRQUFTLGNBQWVDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQ3BHLENBQUNrQixRQUFTLE9BQVFDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQzdGLENBQUNrQixRQUFTLE9BQVFDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQzdGLENBQUNrQixRQUFTLFVBQVdDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQ2hHLENBQUNrQixRQUFTLFVBQVdDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksZ0JBQ2hHLENBQUNrQixRQUFTLFFBQVNDLFNBQVUsTUFBT0MsU0FBVSxLQUFNQyxZQUFhLGdCQUFpQnJCLFdBQVksd0JBQzlGLENBQUNrQixR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bkMsS0FBS2lILG1CQUFtQixRQUV4QmpILEtBQUt5RyxPQUFPLEdBQUdnSCxRQUdmek4sS0FBS3dDLE9BQVM5QyxFQUFzQitDLE9BR3BDekMsS0FBS29DLE9BQU9sQyxRQUFRLGVBR2QsWUFBQStPLDBCQUFSLFdBRUUsUUFBSWpQLEtBQUswQyxhQUFlakQsRUFBNEI4TSxVQUM5Q0UsTUFBTUMsUUFBUTFNLEtBQUtnTSxrQkFDcEJoTSxLQUFLZ00sZUFBZS9ELGNBQWN1TSxTQUFTLFNBTXBELEVBMzVDQSxHQ0NBekMsT0FBTzBDLGtCQUFvQixFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZXhwZXJpYW4tYWRkcmVzcy12YWxpZGF0aW9uLy4vc3JjL3RzL2V2ZW50LWZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vZXhwZXJpYW4tYWRkcmVzcy12YWxpZGF0aW9uLy4vc3JjL3RzL3NlYXJjaC1vcHRpb25zLnRzIiwid2VicGFjazovL2V4cGVyaWFuLWFkZHJlc3MtdmFsaWRhdGlvbi8uL3NyYy90cy9yZXF1ZXN0LnRzIiwid2VicGFjazovL2V4cGVyaWFuLWFkZHJlc3MtdmFsaWRhdGlvbi8uL3NyYy90cy9kYXRhc2V0cy1jb2Rlcy50cyIsIndlYnBhY2s6Ly9leHBlcmlhbi1hZGRyZXNzLXZhbGlkYXRpb24vLi9zcmMvdHMvdHJhbnNsYXRpb25zLnRzIiwid2VicGFjazovL2V4cGVyaWFuLWFkZHJlc3MtdmFsaWRhdGlvbi8uL3NyYy90cy9jbGFzcy10eXBlcy50cyIsIndlYnBhY2s6Ly9leHBlcmlhbi1hZGRyZXNzLXZhbGlkYXRpb24vLi9zcmMvdHMvYWRkcmVzcy1zZWFyY2gudHMiLCJ3ZWJwYWNrOi8vZXhwZXJpYW4tYWRkcmVzcy12YWxpZGF0aW9uLy4vc3JjL3RzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBNZXRob2QgZXZlbnQgbGlzdGVuZXIgKHB1Yi9zdWIgdHlwZSB0aGluZylcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50RmFjdG9yeSB7XHJcbiAgLy8gQ3JlYXRlIGFuIG9iamVjdCB0byBob2xkIHRoZSBjb2xsZWN0aW9uIG9mIGV2ZW50c1xyXG4gIGNvbGxlY3Rpb24gPSB7fTtcclxuXHJcbiAgLy8gU3Vic2NyaWJlIGEgbmV3IGV2ZW50XHJcbiAgb24oZXZlbnQsIGFjdGlvbikge1xyXG4gICAgLy8gQ3JlYXRlIHRoZSBwcm9wZXJ0eSBhcnJheSBvbiB0aGUgY29sbGVjdGlvbiBvYmplY3RcclxuICAgIHRoaXMuY29sbGVjdGlvbltldmVudF0gPSB0aGlzLmNvbGxlY3Rpb25bZXZlbnRdIHx8IFtdO1xyXG4gICAgLy8gUHVzaCBhIG5ldyBhY3Rpb24gZm9yIHRoaXMgZXZlbnQgb250byB0aGUgYXJyYXlcclxuICAgIHRoaXMuY29sbGVjdGlvbltldmVudF0ucHVzaChhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgLy8gUHVibGlzaCAodHJpZ2dlcikgYW4gZXZlbnRcclxuICB0cmlnZ2VyKGV2ZW50LCBkYXRhKSB7XHJcbiAgICAvLyBJZiB0aGlzIGV2ZW50IGlzIGluIG91ciBjb2xsZWN0aW9uIChpLmUuIGFueW9uZSdzIHN1YnNjcmliZWQpXHJcbiAgICBpZiAodGhpcy5jb2xsZWN0aW9uW2V2ZW50XSkge1xyXG4gICAgICAvLyBMb29wIG92ZXIgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGlzIGV2ZW50XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2xsZWN0aW9uW2V2ZW50XS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vIENyZWF0ZSBhcnJheSB3aXRoIGRlZmF1bHQgZGF0YSBhcyAxc3QgaXRlbVxyXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbZGF0YV07XHJcblxyXG4gICAgICAgIC8vIExvb3Agb3ZlciBhZGRpdGlvbmFsIGFyZ3MgYW5kIGFkZCB0byBhcnJheVxyXG4gICAgICAgIGZvciAobGV0IGEgPSAyOyBhIDwgYXJndW1lbnRzLmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2FdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENhbGwgZWFjaCBhY3Rpb24gZm9yIHRoaXMgZXZlbnQgdHlwZSwgcGFzc2luZyB0aGUgYXJnc1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25bZXZlbnRdW2ldLmFwcGx5KHRoaXMuY29sbGVjdGlvbiwgYXJncyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gV2hhdCB0byBkbz8gVW5jb21tZW50IHRoZSBiZWxvdyB0byBzaG93IGVycm9ycyBpbiB5b3VyIGV2ZW50IGFjdGlvbnNcclxuICAgICAgICAgIC8vY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiZXhwb3J0IGludGVyZmFjZSBBZGRyZXNzU2VhcmNoT3B0aW9ucyB7XHJcbiAgZW5hYmxlZDogYm9vbGVhbjtcclxuICB0b2tlbjogc3RyaW5nO1xyXG4gIGF2TW9kZTogQWRkcmVzc1ZhbGlkYXRpb25Nb2RlO1xyXG4gIHNlYXJjaFR5cGU6IEFkZHJlc3NWYWxpZGF0aW9uU2VhcmNoVHlwZTtcclxuICBtYXhTdWdnZXN0aW9uczogbnVtYmVyO1xyXG4gIGxhbmd1YWdlOiBzdHJpbmc7XHJcbiAgbG9jYXRpb246IHN0cmluZztcclxuICB1c2VTcGlubmVyOiBib29sZWFuO1xyXG4gIGNvdW50cnlDb2RlPzogc3RyaW5nO1xyXG4gIGNvdW50cnlDb2RlTWFwcGluZz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XHJcbiAgYXBwbHlGb2N1czogYm9vbGVhbjtcclxuICBwbGFjZWhvbGRlclRleHQ6IHN0cmluZztcclxuICB1c2VBZGRyZXNzRW50ZXJlZFRleHQ6IHN0cmluZztcclxuICBzZWFyY2hBZ2FpbjogeyB2aXNpYmxlPzogYm9vbGVhbiwgdGV4dD86IHN0cmluZywgbGluaz86IEhUTUxCdXR0b25FbGVtZW50IH07XHJcbiAgZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lcjogeyBzaG93SGVhZGluZzogYm9vbGVhbiwgaGVhZGluZ1R5cGU6IHN0cmluZywgdmFsaWRhdGVkSGVhZGluZ1RleHQ6IHN0cmluZywgbWFudWFsSGVhZGluZ1RleHQ6IHN0cmluZyB9O1xyXG4gIGVsZW1lbnRzOiB7IGlucHV0PzogSFRNTElucHV0RWxlbWVudCwgaW5wdXRzPzogSFRNTElucHV0RWxlbWVudFtdLCBjb3VudHJ5TGlzdD86IEhUTUxTZWxlY3RFbGVtZW50LCBhZGRyZXNzX2xpbmVfMT86IEhUTUxJbnB1dEVsZW1lbnQsIGFkZHJlc3NfbGluZV8yPzogSFRNTElucHV0RWxlbWVudCwgYWRkcmVzc19saW5lXzM/OiBIVE1MSW5wdXRFbGVtZW50LCBsb2NhbGl0eT86IEhUTUxJbnB1dEVsZW1lbnQsIHJlZ2lvbj86IEhUTUxJbnB1dEVsZW1lbnQsIHBvc3RhbF9jb2RlPzogSFRNTElucHV0RWxlbWVudCwgY291bnRyeT86IEhUTUxJbnB1dEVsZW1lbnQsIGZvcm1hdHRlZEFkZHJlc3NDb250YWluZXI/OiBIVE1MRWxlbWVudCwgbG9va3VwQnV0dG9uPzogSFRNTEJ1dHRvbkVsZW1lbnQgfTtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlIHtcclxuICBBVVRPQ09NUExFVEUgPSAnYXV0b2NvbXBsZXRlJyxcclxuICBTSU5HTEVMSU5FID0gJ3NpbmdsZWxpbmUnLFxyXG4gIFZBTElEQVRFID0gJ3ZhbGlkYXRlJyxcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQWRkcmVzc1ZhbGlkYXRpb25Nb2RlIHtcclxuICBTRUFSQ0ggPSAxLFxyXG4gIFdIQVQzV09SRFMsXHJcbiAgVURQUk4sXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEFkZHJlc3NWYWxpZGF0aW9uTG9va3VwS2V5d29yZHMge1xyXG4gIFdIQVQzV09SRFMgPSAnd2hhdDN3b3JkcycsXHJcbiAgVURQUk4gPSAndWRwcm4nLFxyXG59XHJcblxyXG4vLyBEZWZhdWx0IHNldHRpbmdzXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0cyA9IHtcclxuICBhdk1vZGU6IEFkZHJlc3NWYWxpZGF0aW9uTW9kZS5TRUFSQ0gsXHJcbiAgc2VhcmNoVHlwZTogQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlLkFVVE9DT01QTEVURSxcclxuICBpbnB1dDogeyBwbGFjZWhvbGRlclRleHQ6ICdTdGFydCB0eXBpbmcgYW4gYWRkcmVzcy4uLicsIGFwcGx5Rm9jdXM6IGZhbHNlIH0sXHJcbiAgZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lcjogeyBzaG93SGVhZGluZzogZmFsc2UsIGhlYWRpbmdUeXBlOiAnaDMnLCB2YWxpZGF0ZWRIZWFkaW5nVGV4dDogJ1ZhbGlkYXRlZCBhZGRyZXNzJywgbWFudWFsSGVhZGluZ1RleHQ6ICdNYW51YWwgYWRkcmVzcyBlbnRlcmVkJyB9LFxyXG4gIHNlYXJjaEFnYWluOiB7IHZpc2libGU6IHRydWUsIHRleHQ6ICdTZWFyY2ggYWdhaW4nIH0sXHJcbiAgdXNlQWRkcmVzc0VudGVyZWRUZXh0OiAnPGVtPiAtIFVzZSBhZGRyZXNzIGVudGVyZWQgb3IgdHJ5IGFnYWluLi4uPC9lbT4nLFxyXG4gIHVzZVNwaW5uZXI6IGZhbHNlLFxyXG4gIGxhbmd1YWdlOiAnZW4nLFxyXG4gIGFkZHJlc3NMaW5lTGFiZWxzOiBbXHJcbiAgICAnYWRkcmVzc19saW5lXzEnLFxyXG4gICAgJ2FkZHJlc3NfbGluZV8yJyxcclxuICAgICdhZGRyZXNzX2xpbmVfMycsXHJcbiAgICAnbG9jYWxpdHknLFxyXG4gICAgJ3JlZ2lvbicsXHJcbiAgICAncG9zdGFsX2NvZGUnLFxyXG4gICAgJ2NvdW50cnknXHJcbiAgXVxyXG59OyIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcXVlc3Qge1xyXG4gIGluc3RhbmNlO1xyXG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlKSB7XHJcbiAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3VycmVudFJlcXVlc3Q7XHJcblxyXG5cclxuICBwdWJsaWMgc2VuZCh1cmw6IHN0cmluZywgbWV0aG9kOiAnR0VUJyB8ICdQT1NUJywgY2FsbGJhY2s6IChkYXRhOiBvYmplY3QpID0+IHZvaWQsIGRhdGE/OiBzdHJpbmcsIGhlYWRlcnM6IHtrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW59W10gPSBbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50UmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgdGhpcy5jdXJyZW50UmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTtcclxuICAgIHRoaXMuY3VycmVudFJlcXVlc3QudGltZW91dCA9IDUwMDA7IC8vIDUgc2Vjb25kc1xyXG4gICAgdGhpcy5jdXJyZW50UmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKCdhdXRoLXRva2VuJywgdGhpcy5pbnN0YW5jZS5vcHRpb25zLnRva2VuKTtcclxuICAgIHRoaXMuY3VycmVudFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgIHRoaXMuY3VycmVudFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuXHJcbiAgICAvLyBBZGQgYWRkaXRpb25hbCBoZWFkZXJzIGlmIHN1cHBsaWVkXHJcbiAgICBoZWFkZXJzLmZvckVhY2goaGVhZGVyID0+IHRoaXMuY3VycmVudFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpKTtcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRSZXF1ZXN0Lm9ubG9hZCA9ICh4aHIpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY3VycmVudFJlcXVlc3Quc3RhdHVzID49IDIwMCAmJiB0aGlzLmN1cnJlbnRSZXF1ZXN0LnN0YXR1cyA8IDQwMCkge1xyXG4gICAgICAgIC8vIFN1Y2Nlc3MhXHJcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UodGhpcy5jdXJyZW50UmVxdWVzdC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgIGNhbGxiYWNrKGRhdGEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFdlIHJlYWNoZWQgb3VyIHRhcmdldCBzZXJ2ZXIsIGJ1dCBpdCByZXR1cm5lZCBhbiBlcnJvclxyXG4gICAgICAgIHRoaXMuaW5zdGFuY2Uuc2VhcmNoU3Bpbm5lci5oaWRlKCk7XHJcblxyXG4gICAgICAgIC8vIEZpcmUgYW4gZXZlbnQgdG8gbm90aWZ5IHVzZXJzIG9mIGEgZ2VuZXJhbCBlcnJvclxyXG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZXZlbnRzLnRyaWdnZXIoJ3JlcXVlc3QtZXJyb3InLCB4aHIpO1xyXG4gICAgICAgIC8vIEZpcmUgYW4gZXZlbnQgZm9yIHRoZSBzcGVjaWZpYyBzdGF0dXMgY29kZVxyXG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZXZlbnRzLnRyaWdnZXIoYHJlcXVlc3QtZXJyb3ItJHt0aGlzLmN1cnJlbnRSZXF1ZXN0LnN0YXR1c31gLCB4aHIpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY3VycmVudFJlcXVlc3Qub25lcnJvciA9ICh4aHIpID0+IHtcclxuICAgICAgLy8gVGhlcmUgd2FzIGEgY29ubmVjdGlvbiBlcnJvciBvZiBzb21lIHNvcnRcclxuICAgICAgLy8gSGlkZSB0aGUgaW5saW5lIHNlYXJjaCBzcGlubmVyXHJcbiAgICAgIHRoaXMuaW5zdGFuY2Uuc2VhcmNoU3Bpbm5lci5oaWRlKCk7XHJcblxyXG4gICAgICAvLyBGaXJlIGFuIGV2ZW50IHRvIG5vdGlmeSB1c2VycyBvZiBhbiBlcnJvclxyXG4gICAgICB0aGlzLmluc3RhbmNlLmV2ZW50cy50cmlnZ2VyKCdyZXF1ZXN0LWVycm9yJywgeGhyKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jdXJyZW50UmVxdWVzdC5vbnRpbWVvdXQgPSAoeGhyKSA9PiB7XHJcbiAgICAgIC8vIFRoZXJlIHdhcyBhIGNvbm5lY3Rpb24gdGltZW91dFxyXG4gICAgICAvLyBIaWRlIHRoZSBpbmxpbmUgc2VhcmNoIHNwaW5uZXJcclxuICAgICAgdGhpcy5pbnN0YW5jZS5zZWFyY2hTcGlubmVyLmhpZGUoKTtcclxuXHJcbiAgICAgIC8vIEZpcmUgYW4gZXZlbnQgdG8gbm90aWZ5IHVzZXJzIG9mIHRoZSB0aW1lb3V0XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuZXZlbnRzLnRyaWdnZXIoJ3JlcXVlc3QtdGltZW91dCcsIHhocik7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY3VycmVudFJlcXVlc3Quc2VuZChkYXRhKTtcclxuICB9XHJcbn0iLCJleHBvcnQgY29uc3QgZGF0YXNldENvZGVzID0gW1xyXG4gIHtjb3VudHJ5OiAnQWZnaGFuaXN0YW4nLCBpc28zQ29kZTogJ0FGRycsIGlzbzJDb2RlOiAnQUYnLCBkYXRhc2V0Q29kZTogJ2FmLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0FmZ2hhbmlzdGFuJywgaXNvM0NvZGU6ICdBRkcnLCBpc28yQ29kZTogJ0FGJywgZGF0YXNldENvZGU6ICdhZi1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQWxiYW5pYScsIGlzbzNDb2RlOiAnQUxCJywgaXNvMkNvZGU6ICdBTCcsIGRhdGFzZXRDb2RlOiAnYWwtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQWxiYW5pYScsIGlzbzNDb2RlOiAnQUxCJywgaXNvMkNvZGU6ICdBTCcsIGRhdGFzZXRDb2RlOiAnYWwtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0FsZ2VyaWEnLCBpc28zQ29kZTogJ0RaQScsIGlzbzJDb2RlOiAnRFonLCBkYXRhc2V0Q29kZTogJ2R6LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0FsZ2VyaWEnLCBpc28zQ29kZTogJ0RaQScsIGlzbzJDb2RlOiAnRFonLCBkYXRhc2V0Q29kZTogJ2R6LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdBbWVyaWNhbiBTYW1vYScsIGlzbzNDb2RlOiAnQVNNJywgaXNvMkNvZGU6ICdBUycsIGRhdGFzZXRDb2RlOiAnYXMtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0FuZG9ycmEnLCBpc28zQ29kZTogJ0FORCcsIGlzbzJDb2RlOiAnQUQnLCBkYXRhc2V0Q29kZTogJ2FkLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0FuZG9ycmEnLCBpc28zQ29kZTogJ0FORCcsIGlzbzJDb2RlOiAnQUQnLCBkYXRhc2V0Q29kZTogJ2FkLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdBbmdvbGEnLCBpc28zQ29kZTogJ0FHTycsIGlzbzJDb2RlOiAnQU8nLCBkYXRhc2V0Q29kZTogJ2FvLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0FuZ29sYScsIGlzbzNDb2RlOiAnQUdPJywgaXNvMkNvZGU6ICdBTycsIGRhdGFzZXRDb2RlOiAnYW8tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0FuZ3VpbGxhJywgaXNvM0NvZGU6ICdBSUEnLCBpc28yQ29kZTogJ0FJJywgZGF0YXNldENvZGU6ICdhaS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQW50YXJjdGljYScsIGlzbzNDb2RlOiAnQVRBJywgaXNvMkNvZGU6ICdBUScsIGRhdGFzZXRDb2RlOiAnYXEtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQW50aWd1YSBhbmQgQmFyYnVkYScsIGlzbzNDb2RlOiAnQVRHJywgaXNvMkNvZGU6ICdBRycsIGRhdGFzZXRDb2RlOiAnYWctYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQW50aWd1YSBhbmQgQmFyYnVkYScsIGlzbzNDb2RlOiAnQVRHJywgaXNvMkNvZGU6ICdBRycsIGRhdGFzZXRDb2RlOiAnYWctYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0FyZ2VudGluYScsIGlzbzNDb2RlOiAnQVJHJywgaXNvMkNvZGU6ICdBUicsIGRhdGFzZXRDb2RlOiAnYXItYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQXJnZW50aW5hJywgaXNvM0NvZGU6ICdBUkcnLCBpc28yQ29kZTogJ0FSJywgZGF0YXNldENvZGU6ICdhci1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQXJtZW5pYScsIGlzbzNDb2RlOiAnQVJNJywgaXNvMkNvZGU6ICdBTScsIGRhdGFzZXRDb2RlOiAnYW0tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQXJtZW5pYScsIGlzbzNDb2RlOiAnQVJNJywgaXNvMkNvZGU6ICdBTScsIGRhdGFzZXRDb2RlOiAnYW0tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0FydWJhJywgaXNvM0NvZGU6ICdBQlcnLCBpc28yQ29kZTogJ0FXJywgZGF0YXNldENvZGU6ICdhdy1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdBcnViYScsIGlzbzNDb2RlOiAnQUJXJywgaXNvMkNvZGU6ICdBVycsIGRhdGFzZXRDb2RlOiAnYXctYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0F1c3RyYWxpYSBEYXRhRnVzaW9uJywgaXNvM0NvZGU6ICdBVVMnLCBpc28yQ29kZTogJ0FVJywgZGF0YXNldENvZGU6ICdhdS1hZGRyZXNzLWRhdGFmdXNpb24nLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlLCBzaW5nbGVsaW5lLCB0eXBlZG93bid9LFxyXG4gIHtjb3VudHJ5OiAnQXVzdHJhbGlhIEdlb2NvZGVkIE5hdGlvbmFsIEFkZHJlc3MnLCBpc28zQ29kZTogJ0FVUycsIGlzbzJDb2RlOiAnQVUnLCBkYXRhc2V0Q29kZTogJ2F1LWFkZHJlc3MtZ25hZicsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUsIHNpbmdsZWxpbmUsIHR5cGVkb3duLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQXVzdHJhbGlhIFBvc3RhbCBBZGRyZXNzJywgaXNvM0NvZGU6ICdBVVMnLCBpc28yQ29kZTogJ0FVJywgZGF0YXNldENvZGU6ICdhdS1hZGRyZXNzJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSwgc2luZ2xlbGluZSwgdHlwZWRvd24sIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdBdXN0cmlhJywgaXNvM0NvZGU6ICdBVVQnLCBpc28yQ29kZTogJ0FUJywgZGF0YXNldENvZGU6ICdhdC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQXVzdHJpYScsIGlzbzNDb2RlOiAnQVVUJywgaXNvMkNvZGU6ICdBVCcsIGRhdGFzZXRDb2RlOiAnYXotYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQXplcmJhaWphbicsIGlzbzNDb2RlOiAnQVpFJywgaXNvMkNvZGU6ICdBWicsIGRhdGFzZXRDb2RlOiAnYXotYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQXplcmJhaWphbicsIGlzbzNDb2RlOiAnQVpFJywgaXNvMkNvZGU6ICdBWicsIGRhdGFzZXRDb2RlOiAnYXotYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0JhaGFtYXMnLCBpc28zQ29kZTogJ0JIUycsIGlzbzJDb2RlOiAnQlMnLCBkYXRhc2V0Q29kZTogJ2JzLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0JhaGFtYXMnLCBpc28zQ29kZTogJ0JIUycsIGlzbzJDb2RlOiAnQlMnLCBkYXRhc2V0Q29kZTogJ2JzLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdCYWhyYWluJywgaXNvM0NvZGU6ICdCSFInLCBpc28yQ29kZTogJ0JIJywgZGF0YXNldENvZGU6ICdiaC1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdCYWhyYWluJywgaXNvM0NvZGU6ICdCSFInLCBpc28yQ29kZTogJ0JIJywgZGF0YXNldENvZGU6ICdiaC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQmFuZ2xhZGVzaCcsIGlzbzNDb2RlOiAnQkdEJywgaXNvMkNvZGU6ICdCRCcsIGRhdGFzZXRDb2RlOiAnYmQtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQmFuZ2xhZGVzaCcsIGlzbzNDb2RlOiAnQkdEJywgaXNvMkNvZGU6ICdCRCcsIGRhdGFzZXRDb2RlOiAnYmQtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0JhcmJhZG9zJywgaXNvM0NvZGU6ICdCUkInLCBpc28yQ29kZTogJ0JCJywgZGF0YXNldENvZGU6ICdiYi1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdCYXJiYWRvcycsIGlzbzNDb2RlOiAnQlJCJywgaXNvMkNvZGU6ICdCQicsIGRhdGFzZXRDb2RlOiAnYmItYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0JlbGFydXMnLCBpc28zQ29kZTogJ0JMUicsIGlzbzJDb2RlOiAnQlknLCBkYXRhc2V0Q29kZTogJ2J5LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0JlbGFydXMnLCBpc28zQ29kZTogJ0JMUicsIGlzbzJDb2RlOiAnQlknLCBkYXRhc2V0Q29kZTogJ2J5LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdCZWxnaXVtJywgaXNvM0NvZGU6ICdCRUwnLCBpc28yQ29kZTogJ0JFJywgZGF0YXNldENvZGU6ICdiZS1hZGRyZXNzJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHR5cGVkb3duJ30sXHJcbiAge2NvdW50cnk6ICdCZWxnaXVtJywgaXNvM0NvZGU6ICdCRUwnLCBpc28yQ29kZTogJ0JFJywgZGF0YXNldENvZGU6ICdiZS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJyB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQmVsZ2l1bScsIGlzbzNDb2RlOiAnQkVMJywgaXNvMkNvZGU6ICdCRScsIGRhdGFzZXRDb2RlOiAnYmUtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0JlbGl6ZScsIGlzbzNDb2RlOiAnQkxaJywgaXNvMkNvZGU6ICdCWicsIGRhdGFzZXRDb2RlOiAnYnotYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQmVsaXplJywgaXNvM0NvZGU6ICdCTFonLCBpc28yQ29kZTogJ0JaJywgZGF0YXNldENvZGU6ICdiei1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQmVuaW4nLCBpc28zQ29kZTogJ0JFTicsIGlzbzJDb2RlOiAnQkonLCBkYXRhc2V0Q29kZTogJ2JqLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0JlbmluJywgaXNvM0NvZGU6ICdCRU4nLCBpc28yQ29kZTogJ0JKJywgZGF0YXNldENvZGU6ICdiai1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQmVybXVkYScsIGlzbzNDb2RlOiAnQk1VJywgaXNvMkNvZGU6ICdCTScsIGRhdGFzZXRDb2RlOiAnYm0tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQmVybXVkYScsIGlzbzNDb2RlOiAnQk1VJywgaXNvMkNvZGU6ICdCTScsIGRhdGFzZXRDb2RlOiAnYm0tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0JodXRhbicsIGlzbzNDb2RlOiAnQlROJywgaXNvMkNvZGU6ICdCVCcsIGRhdGFzZXRDb2RlOiAnYnQtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQmh1dGFuJywgaXNvM0NvZGU6ICdCVE4nLCBpc28yQ29kZTogJ0JUJywgZGF0YXNldENvZGU6ICdidC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQm9saXZpYScsIGlzbzNDb2RlOiAnQk9MJywgaXNvMkNvZGU6ICdCTycsIGRhdGFzZXRDb2RlOiAnYm8tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQm9saXZpYScsIGlzbzNDb2RlOiAnQk9MJywgaXNvMkNvZGU6ICdCTycsIGRhdGFzZXRDb2RlOiAnYm8tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0JvbmFpcmUsIFNpbnQgRXVzdGF0aXVzIGFuZCBTYWJhJywgaXNvM0NvZGU6ICdCRVMnLCBpc28yQ29kZTogJ0JRJywgZGF0YXNldENvZGU6ICdicS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdCb25haXJlLCBTaW50IEV1c3RhdGl1cyBhbmQgU2FiYScsIGlzbzNDb2RlOiAnQkVTJywgaXNvMkNvZGU6ICdCUScsIGRhdGFzZXRDb2RlOiAnYnEtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0Jvc25pYSBhbmQgSGVyemVnb3ZpbmEnLCBpc28zQ29kZTogJ0JJSCcsIGlzbzJDb2RlOiAnQkEnLCBkYXRhc2V0Q29kZTogJ2JhLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0Jvc25pYSBhbmQgSGVyemVnb3ZpbmEnLCBpc28zQ29kZTogJ0JJSCcsIGlzbzJDb2RlOiAnQkEnLCBkYXRhc2V0Q29kZTogJ2JhLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdCb3Rzd2FuYScsIGlzbzNDb2RlOiAnQldBJywgaXNvMkNvZGU6ICdCVycsIGRhdGFzZXRDb2RlOiAnYnctYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQm90c3dhbmEnLCBpc28zQ29kZTogJ0JXQScsIGlzbzJDb2RlOiAnQlcnLCBkYXRhc2V0Q29kZTogJ2J3LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdCcmF6aWwnLCBpc28zQ29kZTogJ0JSQScsIGlzbzJDb2RlOiAnQlInLCBkYXRhc2V0Q29kZTogJ2JyLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0JyYXppbCcsIGlzbzNDb2RlOiAnQlJBJywgaXNvMkNvZGU6ICdCUicsIGRhdGFzZXRDb2RlOiAnYnItYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0JydW5laSBEYXJ1c3NhbGFtJywgaXNvM0NvZGU6ICdCUk4nLCBpc28yQ29kZTogJ0JOJywgZGF0YXNldENvZGU6ICdibi1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdCcnVuZWkgRGFydXNzYWxhbScsIGlzbzNDb2RlOiAnQlJOJywgaXNvMkNvZGU6ICdCTicsIGRhdGFzZXRDb2RlOiAnYm4tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0J1bGdhcmlhJywgaXNvM0NvZGU6ICdCR1InLCBpc28yQ29kZTogJ0JHJywgZGF0YXNldENvZGU6ICdiZy1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdCdWxnYXJpYScsIGlzbzNDb2RlOiAnQkdSJywgaXNvMkNvZGU6ICdCRycsIGRhdGFzZXRDb2RlOiAnYmctYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0J1cmtpbmEgRmFzbycsIGlzbzNDb2RlOiAnQkZBJywgaXNvMkNvZGU6ICdCRicsIGRhdGFzZXRDb2RlOiAnYmYtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQnVya2luYSBGYXNvJywgaXNvM0NvZGU6ICdCRkEnLCBpc28yQ29kZTogJ0JGJywgZGF0YXNldENvZGU6ICdiZi1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQnVydW5kaScsIGlzbzNDb2RlOiAnQkRJJywgaXNvMkNvZGU6ICdCSScsIGRhdGFzZXRDb2RlOiAnYmktYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0NhbWJvZGlhJywgaXNvM0NvZGU6ICdLSE0nLCBpc28yQ29kZTogJ0tIJywgZGF0YXNldENvZGU6ICdraC1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdDYW1ib2RpYScsIGlzbzNDb2RlOiAnS0hNJywgaXNvMkNvZGU6ICdLSCcsIGRhdGFzZXRDb2RlOiAna2gtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0NhbWVyb29uJywgaXNvM0NvZGU6ICdDTVInLCBpc28yQ29kZTogJ0NNJywgZGF0YXNldENvZGU6ICdjbS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdDYW1lcm9vbicsIGlzbzNDb2RlOiAnQ01SJywgaXNvMkNvZGU6ICdDTScsIGRhdGFzZXRDb2RlOiAnY20tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0NhbmFkYScsIGlzbzNDb2RlOiAnQ0FOJywgaXNvMkNvZGU6ICdDQScsIGRhdGFzZXRDb2RlOiAnY2EtYWRkcmVzcycsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUsIHNpbmdsZWxpbmUsIHR5cGVkb3duLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ2FwZSBWZXJkZScsIGlzbzNDb2RlOiAnQ1BWJywgaXNvMkNvZGU6ICdDVicsIGRhdGFzZXRDb2RlOiAnY3YtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ2FwZSBWZXJkZScsIGlzbzNDb2RlOiAnQ1BWJywgaXNvMkNvZGU6ICdDVicsIGRhdGFzZXRDb2RlOiAnY3YtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0NheW1hbiBJc2xhbmRzJywgaXNvM0NvZGU6ICdDWU0nLCBpc28yQ29kZTogJ0tZJywgZGF0YXNldENvZGU6ICdreS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdDYXltYW4gSXNsYW5kcycsIGlzbzNDb2RlOiAnQ1lNJywgaXNvMkNvZGU6ICdLWScsIGRhdGFzZXRDb2RlOiAna3ktYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0NlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYycsIGlzbzNDb2RlOiAnQ0FGJywgaXNvMkNvZGU6ICdDRicsIGRhdGFzZXRDb2RlOiAnY2YtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljJywgaXNvM0NvZGU6ICdDQUYnLCBpc28yQ29kZTogJ0NGJywgZGF0YXNldENvZGU6ICdjZi1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ2hhZCcsIGlzbzNDb2RlOiAnVENEJywgaXNvMkNvZGU6ICdURCcsIGRhdGFzZXRDb2RlOiAndGQtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ2hhZCcsIGlzbzNDb2RlOiAnVENEJywgaXNvMkNvZGU6ICdURCcsIGRhdGFzZXRDb2RlOiAndGQtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0NoaWxlJywgaXNvM0NvZGU6ICdDSEwnLCBpc28yQ29kZTogJ0NMJywgZGF0YXNldENvZGU6ICdjbC1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdDaGlsZScsIGlzbzNDb2RlOiAnQ0hMJywgaXNvMkNvZGU6ICdDTCcsIGRhdGFzZXRDb2RlOiAnY2wtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0NoaW5hJywgaXNvM0NvZGU6ICdDSE4nLCBpc28yQ29kZTogJ0NOJywgZGF0YXNldENvZGU6ICdjbi1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdDaGluYScsIGlzbzNDb2RlOiAnQ0hOJywgaXNvMkNvZGU6ICdDTicsIGRhdGFzZXRDb2RlOiAnY24tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0NocmlzdG1hcyBJc2xhbmQnLCBpc28zQ29kZTogJ0NYUicsIGlzbzJDb2RlOiAnQ1gnLCBkYXRhc2V0Q29kZTogJ2N4LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdDb2NvcyBJc2xhbmQnLCBpc28zQ29kZTogJ0NDSycsIGlzbzJDb2RlOiAnQ0MnLCBkYXRhc2V0Q29kZTogJ2NjLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdDb2xvbWJpYScsIGlzbzNDb2RlOiAnQ09MJywgaXNvMkNvZGU6ICdDTycsIGRhdGFzZXRDb2RlOiAnY28tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ29sb21iaWEnLCBpc28zQ29kZTogJ0NPTCcsIGlzbzJDb2RlOiAnQ08nLCBkYXRhc2V0Q29kZTogJ2NvLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdDb21vcm9zJywgaXNvM0NvZGU6ICdDT00nLCBpc28yQ29kZTogJ0tNJywgZGF0YXNldENvZGU6ICdrbS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdDb21vcm9zJywgaXNvM0NvZGU6ICdDT00nLCBpc28yQ29kZTogJ0tNJywgZGF0YXNldENvZGU6ICdrbS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ29uZ28nLCBpc28zQ29kZTogJ0NPRycsIGlzbzJDb2RlOiAnQ0cnLCBkYXRhc2V0Q29kZTogJ2NnLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0NvbmdvJywgaXNvM0NvZGU6ICdDT0cnLCBpc28yQ29kZTogJ0NHJywgZGF0YXNldENvZGU6ICdjZy1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ29uZ28sIFRoZSBEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZScsIGlzbzNDb2RlOiAnQ09EJywgaXNvMkNvZGU6ICdDRCcsIGRhdGFzZXRDb2RlOiAnY2QtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ29uZ28sIFRoZSBEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZScsIGlzbzNDb2RlOiAnQ09EJywgaXNvMkNvZGU6ICdDRCcsIGRhdGFzZXRDb2RlOiAnY2QtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0Nvb2sgSXNsYW5kcycsIGlzbzNDb2RlOiAnQ09LJywgaXNvMkNvZGU6ICdDSycsIGRhdGFzZXRDb2RlOiAnY2stYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ29vayBJc2xhbmRzJywgaXNvM0NvZGU6ICdDT0snLCBpc28yQ29kZTogJ0NLJywgZGF0YXNldENvZGU6ICdjay1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ29zdGEgUmljYScsIGlzbzNDb2RlOiAnQ1JJJywgaXNvMkNvZGU6ICdDUicsIGRhdGFzZXRDb2RlOiAnY3ItYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ29zdGEgUmljYScsIGlzbzNDb2RlOiAnQ1JJJywgaXNvMkNvZGU6ICdDUicsIGRhdGFzZXRDb2RlOiAnY3ItYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0Nyb2F0aWEnLCBpc28zQ29kZTogJ0hSVicsIGlzbzJDb2RlOiAnSFInLCBkYXRhc2V0Q29kZTogJ2hyLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0Nyb2F0aWEnLCBpc28zQ29kZTogJ0hSVicsIGlzbzJDb2RlOiAnSFInLCBkYXRhc2V0Q29kZTogJ2hyLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdDdWJhJywgaXNvM0NvZGU6ICdDVUInLCBpc28yQ29kZTogJ0NVJywgZGF0YXNldENvZGU6ICdjdS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdDdWJhJywgaXNvM0NvZGU6ICdDVUInLCBpc28yQ29kZTogJ0NVJywgZGF0YXNldENvZGU6ICdjdS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ3VyYcOnYW8nLCBpc28zQ29kZTogJ0NVVycsIGlzbzJDb2RlOiAnQ1cnLCBkYXRhc2V0Q29kZTogJ2N3LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0N1cmHDp2FvJywgaXNvM0NvZGU6ICdDVVcnLCBpc28yQ29kZTogJ0NXJywgZGF0YXNldENvZGU6ICdjdy1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ3lwcnVzJywgaXNvM0NvZGU6ICdDWVAnLCBpc28yQ29kZTogJ0NZJywgZGF0YXNldENvZGU6ICdjeS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdDeXBydXMnLCBpc28zQ29kZTogJ0NZUCcsIGlzbzJDb2RlOiAnQ1knLCBkYXRhc2V0Q29kZTogJ2N5LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdDemVjaCBSZXB1YmxpYycsIGlzbzNDb2RlOiAnQ1pFJywgaXNvMkNvZGU6ICdDWicsIGRhdGFzZXRDb2RlOiAnY3otYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnQ3plY2ggUmVwdWJsaWMnLCBpc28zQ29kZTogJ0NaRScsIGlzbzJDb2RlOiAnQ1onLCBkYXRhc2V0Q29kZTogJ2N6LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdDw7R0ZSBkXFwnSXZvaXJlJywgaXNvM0NvZGU6ICdDSVYnLCBpc28yQ29kZTogJ0NJJywgZGF0YXNldENvZGU6ICdjaS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdDw7R0ZSBkXFwnSXZvaXJlJywgaXNvM0NvZGU6ICdDSVYnLCBpc28yQ29kZTogJ0NJJywgZGF0YXNldENvZGU6ICdjaS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnRGVubWFyaycsIGlzbzNDb2RlOiAnRE5LJywgaXNvMkNvZGU6ICdESycsIGRhdGFzZXRDb2RlOiAnZGstYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnRGVubWFyaycsIGlzbzNDb2RlOiAnRE5LJywgaXNvMkNvZGU6ICdESycsIGRhdGFzZXRDb2RlOiAnZGstYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0RqaWJvdXRpJywgaXNvM0NvZGU6ICdESkknLCBpc28yQ29kZTogJ0RKJywgZGF0YXNldENvZGU6ICdkai1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdEamlib3V0aScsIGlzbzNDb2RlOiAnREpJJywgaXNvMkNvZGU6ICdESicsIGRhdGFzZXRDb2RlOiAnZGotYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0RvbWluaWNhJywgaXNvM0NvZGU6ICdETUEnLCBpc28yQ29kZTogJ0RNJywgZGF0YXNldENvZGU6ICdkbS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdEb21pbmljYScsIGlzbzNDb2RlOiAnRE1BJywgaXNvMkNvZGU6ICdETScsIGRhdGFzZXRDb2RlOiAnZG0tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0RvbWluaWNhbiBSZXB1YmxpYycsIGlzbzNDb2RlOiAnRE9NJywgaXNvMkNvZGU6ICdETycsIGRhdGFzZXRDb2RlOiAnZG8tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnRG9taW5pY2FuIFJlcHVibGljJywgaXNvM0NvZGU6ICdET00nLCBpc28yQ29kZTogJ0RPJywgZGF0YXNldENvZGU6ICdkby1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnRWN1YWRvcicsIGlzbzNDb2RlOiAnRUNVJywgaXNvMkNvZGU6ICdFQycsIGRhdGFzZXRDb2RlOiAnZWMtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnRWN1YWRvcicsIGlzbzNDb2RlOiAnRUNVJywgaXNvMkNvZGU6ICdFQycsIGRhdGFzZXRDb2RlOiAnZWMtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0VneXB0JywgaXNvM0NvZGU6ICdFR1knLCBpc28yQ29kZTogJ0VHJywgZGF0YXNldENvZGU6ICdlZy1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdFZ3lwdCcsIGlzbzNDb2RlOiAnRUdZJywgaXNvMkNvZGU6ICdFRycsIGRhdGFzZXRDb2RlOiAnZWctYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0VsIFNhbHZhZG9yJywgaXNvM0NvZGU6ICdTTFYnLCBpc28yQ29kZTogJ1NWJywgZGF0YXNldENvZGU6ICdzdi1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdFbCBTYWx2YWRvcicsIGlzbzNDb2RlOiAnU0xWJywgaXNvMkNvZGU6ICdTVicsIGRhdGFzZXRDb2RlOiAnc3YtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0VxdWF0b3JpYWwgR3VpbmVhJywgaXNvM0NvZGU6ICdHTlEnLCBpc28yQ29kZTogJ0dRJywgZGF0YXNldENvZGU6ICdncS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdFcXVhdG9yaWFsIEd1aW5lYScsIGlzbzNDb2RlOiAnR05RJywgaXNvMkNvZGU6ICdHUScsIGRhdGFzZXRDb2RlOiAnZ3EtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0VyaXRyZWEnLCBpc28zQ29kZTogJ0VSSScsIGlzbzJDb2RlOiAnRVInLCBkYXRhc2V0Q29kZTogJ2VyLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0VyaXRyZWEnLCBpc28zQ29kZTogJ0VSSScsIGlzbzJDb2RlOiAnRVInLCBkYXRhc2V0Q29kZTogJ2VyLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdFc3RvbmlhJywgaXNvM0NvZGU6ICdFU1QnLCBpc28yQ29kZTogJ0VFJywgZGF0YXNldENvZGU6ICdlZS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdFc3RvbmlhJywgaXNvM0NvZGU6ICdFU1QnLCBpc28yQ29kZTogJ0VFJywgZGF0YXNldENvZGU6ICdlZS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnRXRoaW9waWEnLCBpc28zQ29kZTogJ0VUSCcsIGlzbzJDb2RlOiAnRVQnLCBkYXRhc2V0Q29kZTogJ2V0LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0V0aGlvcGlhJywgaXNvM0NvZGU6ICdFVEgnLCBpc28yQ29kZTogJ0VUJywgZGF0YXNldENvZGU6ICdldC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpJywgaXNvM0NvZGU6ICdGTEsnLCBpc28yQ29kZTogJ0ZLJywgZGF0YXNldENvZGU6ICdmay1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnRmFyb2UgSXNsYW5kcycsIGlzbzNDb2RlOiAnRlJPJywgaXNvMkNvZGU6ICdGTycsIGRhdGFzZXRDb2RlOiAnZm8tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnRmFyb2UgSXNsYW5kcycsIGlzbzNDb2RlOiAnRlJPJywgaXNvMkNvZGU6ICdGTycsIGRhdGFzZXRDb2RlOiAnZm8tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0ZpamknLCBpc28zQ29kZTogJ0ZKSScsIGlzbzJDb2RlOiAnRkonLCBkYXRhc2V0Q29kZTogJ2ZqLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0ZpamknLCBpc28zQ29kZTogJ0ZKSScsIGlzbzJDb2RlOiAnRkonLCBkYXRhc2V0Q29kZTogJ2ZqLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdGaW5sYW5kJywgaXNvM0NvZGU6ICdGSU4nLCBpc28yQ29kZTogJ0ZJJywgZGF0YXNldENvZGU6ICdmaS1hZGRyZXNzJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHR5cGVkb3duJ30sXHJcbiAge2NvdW50cnk6ICdGaW5sYW5kJywgaXNvM0NvZGU6ICdGSU4nLCBpc28yQ29kZTogJ0ZJJywgZGF0YXNldENvZGU6ICdmaS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3ZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdGaW5sYW5kJywgaXNvM0NvZGU6ICdGSU4nLCBpc28yQ29kZTogJ0ZJJywgZGF0YXNldENvZGU6ICdmaS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnRnJhbmNlIFN0cmVldCBMZXZlbCcsIGlzbzNDb2RlOiAnRlJBJywgaXNvMkNvZGU6ICdGUicsIGRhdGFzZXRDb2RlOiAnZnItYWRkcmVzcy1zdHJlZXRsZXZlbCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB0eXBlZG93biwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0ZyYW5jZSBTdWItUHJlbWlzZXMgTGV2ZWwnLCBpc28zQ29kZTogJ0ZSQScsIGlzbzJDb2RlOiAnRlInLCBkYXRhc2V0Q29kZTogJ2ZyLWFkZGl0aW9uYWwtaGV4YWxpbmUzJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSwgc2luZ2xlbGluZSwgdHlwZWRvd24nfSxcclxuICB7Y291bnRyeTogJ0ZyYW5jZSBQcmVtaXNlcyBMZXZlbCcsIGlzbzNDb2RlOiAnRlJBJywgaXNvMkNvZGU6ICdGUicsIGRhdGFzZXRDb2RlOiAnZnItYWRkcmVzcycsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB0eXBlZG93biwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0ZyZW5jaCBHdWlhbmEnLCBpc28zQ29kZTogJ0dVRicsIGlzbzJDb2RlOiAnR0YnLCBkYXRhc2V0Q29kZTogJ2dmLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdGcmVuY2ggUG9seW5lc2lhJywgaXNvM0NvZGU6ICdQWUYnLCBpc28yQ29kZTogJ1BGJywgZGF0YXNldENvZGU6ICdwZi1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnR2Fib24nLCBpc28zQ29kZTogJ0dBQicsIGlzbzJDb2RlOiAnR0EnLCBkYXRhc2V0Q29kZTogJ2dhLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0dhYm9uJywgaXNvM0NvZGU6ICdHQUInLCBpc28yQ29kZTogJ0dBJywgZGF0YXNldENvZGU6ICdnYS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnR2FtYmlhJywgaXNvM0NvZGU6ICdHTUInLCBpc28yQ29kZTogJ0dNJywgZGF0YXNldENvZGU6ICdnbS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdHYW1iaWEnLCBpc28zQ29kZTogJ0dNQicsIGlzbzJDb2RlOiAnR00nLCBkYXRhc2V0Q29kZTogJ2dtLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdHZW9yZ2lhJywgaXNvM0NvZGU6ICdHRU8nLCBpc28yQ29kZTogJ0dFJywgZGF0YXNldENvZGU6ICdnZS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdHZW9yZ2lhJywgaXNvM0NvZGU6ICdHRU8nLCBpc28yQ29kZTogJ0dFJywgZGF0YXNldENvZGU6ICdnZS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnR2VybWFueScsIGlzbzNDb2RlOiAnREVVJywgaXNvMkNvZGU6ICdERScsIGRhdGFzZXRDb2RlOiAnZGUtYWRkcmVzcycsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB0eXBlZG93biwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0dlcm1hbnknLCBpc28zQ29kZTogJ0RFVScsIGlzbzJDb2RlOiAnREUnLCBkYXRhc2V0Q29kZTogJ2RlLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAndmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0dlcm1hbnknLCBpc28zQ29kZTogJ0RFVScsIGlzbzJDb2RlOiAnREUnLCBkYXRhc2V0Q29kZTogJ2RlLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdHaGFuYScsIGlzbzNDb2RlOiAnR0hBJywgaXNvMkNvZGU6ICdHSCcsIGRhdGFzZXRDb2RlOiAnZ2gtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnR2hhbmEnLCBpc28zQ29kZTogJ0dIQScsIGlzbzJDb2RlOiAnR0gnLCBkYXRhc2V0Q29kZTogJ2doLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdHaWJyYWx0YXInLCBpc28zQ29kZTogJ0dJQicsIGlzbzJDb2RlOiAnR0knLCBkYXRhc2V0Q29kZTogJ2dpLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdHcmVlY2UnLCBpc28zQ29kZTogJ0dSQycsIGlzbzJDb2RlOiAnR1InLCBkYXRhc2V0Q29kZTogJ2dyLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0dyZWVjZScsIGlzbzNDb2RlOiAnR1JDJywgaXNvMkNvZGU6ICdHUicsIGRhdGFzZXRDb2RlOiAnZ3ItYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0dyZWVubGFuZCcsIGlzbzNDb2RlOiAnR1JMJywgaXNvMkNvZGU6ICdHTCcsIGRhdGFzZXRDb2RlOiAnZ2wtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnR3JlZW5sYW5kJywgaXNvM0NvZGU6ICdHUkwnLCBpc28yQ29kZTogJ0dMJywgZGF0YXNldENvZGU6ICdnbC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnR3JlbmFkYScsIGlzbzNDb2RlOiAnR1JEJywgaXNvMkNvZGU6ICdHRCcsIGRhdGFzZXRDb2RlOiAnZ2QtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnR3JlbmFkYScsIGlzbzNDb2RlOiAnR1JEJywgaXNvMkNvZGU6ICdHRCcsIGRhdGFzZXRDb2RlOiAnZ2QtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0d1YWRlbG91cGUnLCBpc28zQ29kZTogJ0dMUCcsIGlzbzJDb2RlOiAnR1AnLCBkYXRhc2V0Q29kZTogJ2dwLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdHdWFtJywgaXNvM0NvZGU6ICdHVU0nLCBpc28yQ29kZTogJ0dVJywgZGF0YXNldENvZGU6ICdndS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnR3VhdGVtYWxhJywgaXNvM0NvZGU6ICdHVE0nLCBpc28yQ29kZTogJ0dUJywgZGF0YXNldENvZGU6ICdndC1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdHdWF0ZW1hbGEnLCBpc28zQ29kZTogJ0dUTScsIGlzbzJDb2RlOiAnR1QnLCBkYXRhc2V0Q29kZTogJ2d0LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdHdWluZWEnLCBpc28zQ29kZTogJ0dJTicsIGlzbzJDb2RlOiAnR04nLCBkYXRhc2V0Q29kZTogJ2duLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0d1aW5lYScsIGlzbzNDb2RlOiAnR0lOJywgaXNvMkNvZGU6ICdHTicsIGRhdGFzZXRDb2RlOiAnZ24tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0d1aW5lYS1CaXNzYXUnLCBpc28zQ29kZTogJ0dOQicsIGlzbzJDb2RlOiAnR1cnLCBkYXRhc2V0Q29kZTogJ2d3LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0d1aW5lYS1CaXNzYXUnLCBpc28zQ29kZTogJ0dOQicsIGlzbzJDb2RlOiAnR1cnLCBkYXRhc2V0Q29kZTogJ2d3LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdHdXlhbmEnLCBpc28zQ29kZTogJ0dVWScsIGlzbzJDb2RlOiAnR1knLCBkYXRhc2V0Q29kZTogJ2d5LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0d1eWFuYScsIGlzbzNDb2RlOiAnR1VZJywgaXNvMkNvZGU6ICdHWScsIGRhdGFzZXRDb2RlOiAnZ3ktYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0hhaXRpJywgaXNvM0NvZGU6ICdIVEknLCBpc28yQ29kZTogJ0hUJywgZGF0YXNldENvZGU6ICdodC1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdIYWl0aScsIGlzbzNDb2RlOiAnSFRJJywgaXNvMkNvZGU6ICdIVCcsIGRhdGFzZXRDb2RlOiAnaHQtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0hvbmR1cmFzJywgaXNvM0NvZGU6ICdITkQnLCBpc28yQ29kZTogJ0hOJywgZGF0YXNldENvZGU6ICdobi1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdIb25kdXJhcycsIGlzbzNDb2RlOiAnSE5EJywgaXNvMkNvZGU6ICdITicsIGRhdGFzZXRDb2RlOiAnaG4tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0hvbmcgS29uZycsIGlzbzNDb2RlOiAnSEtHJywgaXNvMkNvZGU6ICdISycsIGRhdGFzZXRDb2RlOiAnaGstYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnSG9uZyBLb25nJywgaXNvM0NvZGU6ICdIS0cnLCBpc28yQ29kZTogJ0hLJywgZGF0YXNldENvZGU6ICdoay1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnSHVuZ2FyeScsIGlzbzNDb2RlOiAnSFVOJywgaXNvMkNvZGU6ICdIVScsIGRhdGFzZXRDb2RlOiAnaHUtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnSHVuZ2FyeScsIGlzbzNDb2RlOiAnSFVOJywgaXNvMkNvZGU6ICdIVScsIGRhdGFzZXRDb2RlOiAnaHUtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0ljZWxhbmQnLCBpc28zQ29kZTogJ0lTTCcsIGlzbzJDb2RlOiAnSVMnLCBkYXRhc2V0Q29kZTogJ2lzLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0ljZWxhbmQnLCBpc28zQ29kZTogJ0lTTCcsIGlzbzJDb2RlOiAnSVMnLCBkYXRhc2V0Q29kZTogJ2lzLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdJbmRpYScsIGlzbzNDb2RlOiAnSU5EJywgaXNvMkNvZGU6ICdJTicsIGRhdGFzZXRDb2RlOiAnaW4tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnSW5kaWEnLCBpc28zQ29kZTogJ0lORCcsIGlzbzJDb2RlOiAnSU4nLCBkYXRhc2V0Q29kZTogJ2luLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdJbmRvbmVzaWEnLCBpc28zQ29kZTogJ0lETicsIGlzbzJDb2RlOiAnSUQnLCBkYXRhc2V0Q29kZTogJ2lkLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0luZG9uZXNpYScsIGlzbzNDb2RlOiAnSUROJywgaXNvMkNvZGU6ICdJRCcsIGRhdGFzZXRDb2RlOiAnaWQtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0lyYW4sIElzbGFtaWMgUmVwdWJsaWMgb2YnLCBpc28zQ29kZTogJ0lSTicsIGlzbzJDb2RlOiAnSVInLCBkYXRhc2V0Q29kZTogJ2lyLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0lyYW4sIElzbGFtaWMgUmVwdWJsaWMgb2YnLCBpc28zQ29kZTogJ0lSTicsIGlzbzJDb2RlOiAnSVInLCBkYXRhc2V0Q29kZTogJ2lyLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdJcmFxJywgaXNvM0NvZGU6ICdJUlEnLCBpc28yQ29kZTogJ0lRJywgZGF0YXNldENvZGU6ICdpcS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdJcmFxJywgaXNvM0NvZGU6ICdJUlEnLCBpc28yQ29kZTogJ0lRJywgZGF0YXNldENvZGU6ICdpcS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnSXJlbGFuZCcsIGlzbzNDb2RlOiAnSVJMJywgaXNvMkNvZGU6ICdJRScsIGRhdGFzZXRDb2RlOiAnaWUtYWRkcmVzcycsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB0eXBlZG93bid9LFxyXG4gIHtjb3VudHJ5OiAnSXJlbGFuZCcsIGlzbzNDb2RlOiAnSVJMJywgaXNvMkNvZGU6ICdJRScsIGRhdGFzZXRDb2RlOiAnaWUtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnSXJlbGFuZCcsIGlzbzNDb2RlOiAnSVJMJywgaXNvMkNvZGU6ICdJRScsIGRhdGFzZXRDb2RlOiAnaWUtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0lyZWxhbmQgRWlyY29kZScsIGlzbzNDb2RlOiAnSVJMJywgaXNvMkNvZGU6ICdJRScsIGRhdGFzZXRDb2RlOiAnaWUtYWRkaXRpb25hbC1laXJjb2RlJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnSXJlbGFuZCBFQ0FEJywgaXNvM0NvZGU6ICdJUkwnLCBpc28yQ29kZTogJ0lFJywgZGF0YXNldENvZGU6ICdpZS1hZGRyZXNzLWVjYWQnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdJc3JhZWwnLCBpc28zQ29kZTogJ0lTUicsIGlzbzJDb2RlOiAnSUwnLCBkYXRhc2V0Q29kZTogJ2lsLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0lzcmFlbCcsIGlzbzNDb2RlOiAnSVNSJywgaXNvMkNvZGU6ICdJTCcsIGRhdGFzZXRDb2RlOiAnaWwtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0l0YWx5JywgaXNvM0NvZGU6ICdJVEEnLCBpc28yQ29kZTogJ0lUJywgZGF0YXNldENvZGU6ICdpdC1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdJdGFseScsIGlzbzNDb2RlOiAnSVRBJywgaXNvMkNvZGU6ICdJVCcsIGRhdGFzZXRDb2RlOiAnaXQtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0phbWFpY2EnLCBpc28zQ29kZTogJ0pBTScsIGlzbzJDb2RlOiAnSk0nLCBkYXRhc2V0Q29kZTogJ2ptLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0phbWFpY2EnLCBpc28zQ29kZTogJ0pBTScsIGlzbzJDb2RlOiAnSk0nLCBkYXRhc2V0Q29kZTogJ2ptLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdKYXBhbicsIGlzbzNDb2RlOiAnSlBOJywgaXNvMkNvZGU6ICdKUCcsIGRhdGFzZXRDb2RlOiAnanAtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnSmFwYW4nLCBpc28zQ29kZTogJ0pQTicsIGlzbzJDb2RlOiAnSlAnLCBkYXRhc2V0Q29kZTogJ2pwLWFkZHJlc3MnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0pvcmRhbicsIGlzbzNDb2RlOiAnSk9SJywgaXNvMkNvZGU6ICdKTycsIGRhdGFzZXRDb2RlOiAnam8tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnSm9yZGFuJywgaXNvM0NvZGU6ICdKT1InLCBpc28yQ29kZTogJ0pPJywgZGF0YXNldENvZGU6ICdqby1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnS2F6YWtoc3RhbicsIGlzbzNDb2RlOiAnS0FaJywgaXNvMkNvZGU6ICdLWicsIGRhdGFzZXRDb2RlOiAna3otYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnS2F6YWtoc3RhbicsIGlzbzNDb2RlOiAnS0FaJywgaXNvMkNvZGU6ICdLWicsIGRhdGFzZXRDb2RlOiAna3otYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0tlbnlhJywgaXNvM0NvZGU6ICdLRU4nLCBpc28yQ29kZTogJ0tFJywgZGF0YXNldENvZGU6ICdrZS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdLZW55YScsIGlzbzNDb2RlOiAnS0VOJywgaXNvMkNvZGU6ICdLRScsIGRhdGFzZXRDb2RlOiAna2UtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0tpcmliYXRpJywgaXNvM0NvZGU6ICdLSVInLCBpc28yQ29kZTogJ0tJJywgZGF0YXNldENvZGU6ICdraS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdLaXJpYmF0aScsIGlzbzNDb2RlOiAnS0lSJywgaXNvMkNvZGU6ICdLSScsIGRhdGFzZXRDb2RlOiAna2ktYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0tvcmVhLCBEZW1vY3JhdGljIFBlb3BsZVxcJ3MgUmVwdWJsaWMgb2YnLCBpc28zQ29kZTogJ1BSSycsIGlzbzJDb2RlOiAnS1AnLCBkYXRhc2V0Q29kZTogJ2twLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0tvcmVhLCBEZW1vY3JhdGljIFBlb3BsZVxcJ3MgUmVwdWJsaWMgb2YnLCBpc28zQ29kZTogJ1BSSycsIGlzbzJDb2RlOiAnS1AnLCBkYXRhc2V0Q29kZTogJ2twLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdLb3JlYSwgUmVwdWJsaWMgb2YnLCBpc28zQ29kZTogJ0tPUicsIGlzbzJDb2RlOiAnS1InLCBkYXRhc2V0Q29kZTogJ2tyLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0tvcmVhLCBSZXB1YmxpYyBvZicsIGlzbzNDb2RlOiAnS09SJywgaXNvMkNvZGU6ICdLUicsIGRhdGFzZXRDb2RlOiAna3ItYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0tvc292bycsIGlzbzNDb2RlOiAnS09TJywgaXNvMkNvZGU6ICdYSycsIGRhdGFzZXRDb2RlOiAna3YtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0t1d2FpdCcsIGlzbzNDb2RlOiAnS1dUJywgaXNvMkNvZGU6ICdLVycsIGRhdGFzZXRDb2RlOiAna3ctYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnS3V3YWl0JywgaXNvM0NvZGU6ICdLV1QnLCBpc28yQ29kZTogJ0tXJywgZGF0YXNldENvZGU6ICdrdy1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnS3lyZ3l6c3RhbicsIGlzbzNDb2RlOiAnS0daJywgaXNvMkNvZGU6ICdLRycsIGRhdGFzZXRDb2RlOiAna2ctYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnS3lyZ3l6c3RhbicsIGlzbzNDb2RlOiAnS0daJywgaXNvMkNvZGU6ICdLRycsIGRhdGFzZXRDb2RlOiAna2ctYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0xhb3MnLCBpc28zQ29kZTogJ0xBTycsIGlzbzJDb2RlOiAnTEEnLCBkYXRhc2V0Q29kZTogJ2xhLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0xhb3MnLCBpc28zQ29kZTogJ0xBTycsIGlzbzJDb2RlOiAnTEEnLCBkYXRhc2V0Q29kZTogJ2xhLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdMYXR2aWEnLCBpc28zQ29kZTogJ0xWQScsIGlzbzJDb2RlOiAnTFYnLCBkYXRhc2V0Q29kZTogJ2x2LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0xhdHZpYScsIGlzbzNDb2RlOiAnTFZBJywgaXNvMkNvZGU6ICdMVicsIGRhdGFzZXRDb2RlOiAnbHYtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0xlYmFub24nLCBpc28zQ29kZTogJ0xCTicsIGlzbzJDb2RlOiAnTEInLCBkYXRhc2V0Q29kZTogJ2xiLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0xlYmFub24nLCBpc28zQ29kZTogJ0xCTicsIGlzbzJDb2RlOiAnTEInLCBkYXRhc2V0Q29kZTogJ2xiLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdMZXNvdGhvJywgaXNvM0NvZGU6ICdMU08nLCBpc28yQ29kZTogJ0xTJywgZGF0YXNldENvZGU6ICdscy1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdMZXNvdGhvJywgaXNvM0NvZGU6ICdMU08nLCBpc28yQ29kZTogJ0xTJywgZGF0YXNldENvZGU6ICdscy1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTGliZXJpYScsIGlzbzNDb2RlOiAnTEJSJywgaXNvMkNvZGU6ICdMUicsIGRhdGFzZXRDb2RlOiAnbHItYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTGliZXJpYScsIGlzbzNDb2RlOiAnTEJSJywgaXNvMkNvZGU6ICdMUicsIGRhdGFzZXRDb2RlOiAnbHItYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0xpYnlhJywgaXNvM0NvZGU6ICdMQlknLCBpc28yQ29kZTogJ0xZJywgZGF0YXNldENvZGU6ICdseS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdMaWJ5YScsIGlzbzNDb2RlOiAnTEJZJywgaXNvMkNvZGU6ICdMWScsIGRhdGFzZXRDb2RlOiAnbHktYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0xpZWNodGVuc3RlaW4nLCBpc28zQ29kZTogJ0xJRScsIGlzbzJDb2RlOiAnTEknLCBkYXRhc2V0Q29kZTogJ2xpLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0xpZWNodGVuc3RlaW4nLCBpc28zQ29kZTogJ0xJRScsIGlzbzJDb2RlOiAnTEknLCBkYXRhc2V0Q29kZTogJ2xpLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdMaXRodWFuaWEnLCBpc28zQ29kZTogJ0xUVScsIGlzbzJDb2RlOiAnTFQnLCBkYXRhc2V0Q29kZTogJ2x0LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0xpdGh1YW5pYScsIGlzbzNDb2RlOiAnTFRVJywgaXNvMkNvZGU6ICdMVCcsIGRhdGFzZXRDb2RlOiAnbHQtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ0x1eGVtYm91cmcnLCBpc28zQ29kZTogJ0xVWCcsIGlzbzJDb2RlOiAnTFUnLCBkYXRhc2V0Q29kZTogJ2x1LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ0x1eGVtYm91cmcnLCBpc28zQ29kZTogJ0xVWCcsIGlzbzJDb2RlOiAnTFUnLCBkYXRhc2V0Q29kZTogJ2x1LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYWNhdScsIGlzbzNDb2RlOiAnTUFDJywgaXNvMkNvZGU6ICdNTycsIGRhdGFzZXRDb2RlOiAnbHYtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTWFjYXUnLCBpc28zQ29kZTogJ01BQycsIGlzbzJDb2RlOiAnTU8nLCBkYXRhc2V0Q29kZTogJ2x2LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYWRhZ2FzY2FyJywgaXNvM0NvZGU6ICdNREcnLCBpc28yQ29kZTogJ01HJywgZGF0YXNldENvZGU6ICdtby1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYWRhZ2FzY2FyJywgaXNvM0NvZGU6ICdNREcnLCBpc28yQ29kZTogJ01HJywgZGF0YXNldENvZGU6ICdtby1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTWFsYXdpJywgaXNvM0NvZGU6ICdNV0knLCBpc28yQ29kZTogJ01XJywgZGF0YXNldENvZGU6ICdtdy1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYWxhd2knLCBpc28zQ29kZTogJ01XSScsIGlzbzJDb2RlOiAnTVcnLCBkYXRhc2V0Q29kZTogJ213LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYWxheXNpYScsIGlzbzNDb2RlOiAnTVlTJywgaXNvMkNvZGU6ICdNWScsIGRhdGFzZXRDb2RlOiAnbXktYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTWFsYXlzaWEnLCBpc28zQ29kZTogJ01ZUycsIGlzbzJDb2RlOiAnTVknLCBkYXRhc2V0Q29kZTogJ215LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYWxkaXZlcycsIGlzbzNDb2RlOiAnTURWJywgaXNvMkNvZGU6ICdNVicsIGRhdGFzZXRDb2RlOiAnbXYtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTWFsZGl2ZXMnLCBpc28zQ29kZTogJ01EVicsIGlzbzJDb2RlOiAnTVYnLCBkYXRhc2V0Q29kZTogJ212LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYWxpJywgaXNvM0NvZGU6ICdNTEknLCBpc28yQ29kZTogJ01MJywgZGF0YXNldENvZGU6ICdtbC1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYWxpJywgaXNvM0NvZGU6ICdNTEknLCBpc28yQ29kZTogJ01MJywgZGF0YXNldENvZGU6ICdtbC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTWFsdGEnLCBpc28zQ29kZTogJ01MVCcsIGlzbzJDb2RlOiAnTVQnLCBkYXRhc2V0Q29kZTogJ210LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ01hbHRhJywgaXNvM0NvZGU6ICdNTFQnLCBpc28yQ29kZTogJ01UJywgZGF0YXNldENvZGU6ICdtdC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTWFyc2hhbGwgSXNsYW5kcycsIGlzbzNDb2RlOiAnTUhMJywgaXNvMkNvZGU6ICdNSCcsIGRhdGFzZXRDb2RlOiAnbWgtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ01hcnRpbmlxdWUnLCBpc28zQ29kZTogJ01UUScsIGlzbzJDb2RlOiAnTVEnLCBkYXRhc2V0Q29kZTogJ21xLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYXVyaXRhbmlhJywgaXNvM0NvZGU6ICdNUlQnLCBpc28yQ29kZTogJ01SJywgZGF0YXNldENvZGU6ICdtci1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYXVyaXRhbmlhJywgaXNvM0NvZGU6ICdNUlQnLCBpc28yQ29kZTogJ01SJywgZGF0YXNldENvZGU6ICdtci1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTWF1cml0aXVzJywgaXNvM0NvZGU6ICdNVVMnLCBpc28yQ29kZTogJ01VJywgZGF0YXNldENvZGU6ICdtdS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYXVyaXRpdXMnLCBpc28zQ29kZTogJ01VUycsIGlzbzJDb2RlOiAnTVUnLCBkYXRhc2V0Q29kZTogJ211LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdNYXlvdHRlJywgaXNvM0NvZGU6ICdNWVQnLCBpc28yQ29kZTogJ1lUJywgZGF0YXNldENvZGU6ICd5dC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTWV4aWNvJywgaXNvM0NvZGU6ICdNRVgnLCBpc28yQ29kZTogJ01YJywgZGF0YXNldENvZGU6ICdteC1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdNZXhpY28nLCBpc28zQ29kZTogJ01FWCcsIGlzbzJDb2RlOiAnTVgnLCBkYXRhc2V0Q29kZTogJ214LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdNaWNyb25lc2lhLCBGZWRlcmF0ZWQgU3RhdGVzIG9mJywgaXNvM0NvZGU6ICdGU00nLCBpc28yQ29kZTogJ0ZNJywgZGF0YXNldENvZGU6ICdmbS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTW9sZG92YScsIGlzbzNDb2RlOiAnTURBJywgaXNvMkNvZGU6ICdNRCcsIGRhdGFzZXRDb2RlOiAnbWQtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTW9sZG92YScsIGlzbzNDb2RlOiAnTURBJywgaXNvMkNvZGU6ICdNRCcsIGRhdGFzZXRDb2RlOiAnbWQtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ01vbmFjbycsIGlzbzNDb2RlOiAnTUNPJywgaXNvMkNvZGU6ICdNQycsIGRhdGFzZXRDb2RlOiAnbWMtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTW9uYWNvJywgaXNvM0NvZGU6ICdNQ08nLCBpc28yQ29kZTogJ01DJywgZGF0YXNldENvZGU6ICdtYy1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTW9uZ29saWEnLCBpc28zQ29kZTogJ01ORycsIGlzbzJDb2RlOiAnTU4nLCBkYXRhc2V0Q29kZTogJ21uLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ01vbmdvbGlhJywgaXNvM0NvZGU6ICdNTkcnLCBpc28yQ29kZTogJ01OJywgZGF0YXNldENvZGU6ICdtbi1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTW9udGVuZWdybycsIGlzbzNDb2RlOiAnTU5FJywgaXNvMkNvZGU6ICdNRScsIGRhdGFzZXRDb2RlOiAnbWUtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTW9udGVuZWdybycsIGlzbzNDb2RlOiAnTU5FJywgaXNvMkNvZGU6ICdNRScsIGRhdGFzZXRDb2RlOiAnbWUtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ01vbnRzZXJyYXQnLCBpc28zQ29kZTogJ01TUicsIGlzbzJDb2RlOiAnTVMnLCBkYXRhc2V0Q29kZTogJ21zLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdNb3JvY2NvJywgaXNvM0NvZGU6ICdNQVInLCBpc28yQ29kZTogJ01BJywgZGF0YXNldENvZGU6ICdtYS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdNb3JvY2NvJywgaXNvM0NvZGU6ICdNQVInLCBpc28yQ29kZTogJ01BJywgZGF0YXNldENvZGU6ICdtYS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTW96YW1iaXF1ZScsIGlzbzNDb2RlOiAnTU9aJywgaXNvMkNvZGU6ICdNWicsIGRhdGFzZXRDb2RlOiAnbXotYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTW96YW1iaXF1ZScsIGlzbzNDb2RlOiAnTU9aJywgaXNvMkNvZGU6ICdNWicsIGRhdGFzZXRDb2RlOiAnbXotYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ015YW5tYXInLCBpc28zQ29kZTogJ01NUicsIGlzbzJDb2RlOiAnTU0nLCBkYXRhc2V0Q29kZTogJ21tLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ015YW5tYXInLCBpc28zQ29kZTogJ01NUicsIGlzbzJDb2RlOiAnTU0nLCBkYXRhc2V0Q29kZTogJ21tLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdOYW1pYmlhJywgaXNvM0NvZGU6ICdOQU0nLCBpc28yQ29kZTogJ05BJywgZGF0YXNldENvZGU6ICduYS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdOYW1pYmlhJywgaXNvM0NvZGU6ICdOQU0nLCBpc28yQ29kZTogJ05BJywgZGF0YXNldENvZGU6ICduYS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTmF1cnUnLCBpc28zQ29kZTogJ05SVScsIGlzbzJDb2RlOiAnTlInLCBkYXRhc2V0Q29kZTogJ25yLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ05hdXJ1JywgaXNvM0NvZGU6ICdOUlUnLCBpc28yQ29kZTogJ05SJywgZGF0YXNldENvZGU6ICduci1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTmVwYWwnLCBpc28zQ29kZTogJ05QTCcsIGlzbzJDb2RlOiAnTlAnLCBkYXRhc2V0Q29kZTogJ25wLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ05lcGFsJywgaXNvM0NvZGU6ICdOUEwnLCBpc28yQ29kZTogJ05QJywgZGF0YXNldENvZGU6ICducC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTmV0aGVybGFuZHMnLCBpc28zQ29kZTogJ05MRCcsIGlzbzJDb2RlOiAnTkwnLCBkYXRhc2V0Q29kZTogJ25sLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ05ldGhlcmxhbmRzJywgaXNvM0NvZGU6ICdOTEQnLCBpc28yQ29kZTogJ05MJywgZGF0YXNldENvZGU6ICdubC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTmV3IENhbGVkb25pYScsIGlzbzNDb2RlOiAnTkNMJywgaXNvMkNvZGU6ICdOQycsIGRhdGFzZXRDb2RlOiAnbmMtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ05ldyBaZWFsYW5kIERhdGFGdXNpb24nLCBpc28zQ29kZTogJ05aTCcsIGlzbzJDb2RlOiAnTlonLCBkYXRhc2V0Q29kZTogJ256LWFkZGl0aW9uYWwtZGF0YWZ1c2lvbicsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUsIHNpbmdsZWxpbmUsIHR5cGVkb3duLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTmV3IFplYWxhbmQgUG9zdGFsIEFkZHJlc3MnLCBpc28zQ29kZTogJ05aTCcsIGlzbzJDb2RlOiAnTlonLCBkYXRhc2V0Q29kZTogJ256LWFkZHJlc3MnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlLCBzaW5nbGVsaW5lLCB0eXBlZG93biwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ05pY2FyYWd1YScsIGlzbzNDb2RlOiAnTklDJywgaXNvMkNvZGU6ICdOSScsIGRhdGFzZXRDb2RlOiAnbmktYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTmljYXJhZ3VhJywgaXNvM0NvZGU6ICdOSUMnLCBpc28yQ29kZTogJ05JJywgZGF0YXNldENvZGU6ICduaS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTmlnZXInLCBpc28zQ29kZTogJ05FUicsIGlzbzJDb2RlOiAnTkUnLCBkYXRhc2V0Q29kZTogJ25lLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ05pZ2VyJywgaXNvM0NvZGU6ICdORVInLCBpc28yQ29kZTogJ05FJywgZGF0YXNldENvZGU6ICduZS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTmlnZXJpYScsIGlzbzNDb2RlOiAnTkdBJywgaXNvMkNvZGU6ICdORycsIGRhdGFzZXRDb2RlOiAnbmctYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTmlnZXJpYScsIGlzbzNDb2RlOiAnTkdBJywgaXNvMkNvZGU6ICdORycsIGRhdGFzZXRDb2RlOiAnbmctYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ05pdWUnLCBpc28zQ29kZTogJ05JVScsIGlzbzJDb2RlOiAnTlUnLCBkYXRhc2V0Q29kZTogJ251LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ05vcmZvbGsgSXNsYW5kJywgaXNvM0NvZGU6ICdORksnLCBpc28yQ29kZTogJ05GJywgZGF0YXNldENvZGU6ICduZi1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdOb3Jmb2xrIElzbGFuZCcsIGlzbzNDb2RlOiAnTkZLJywgaXNvMkNvZGU6ICdORicsIGRhdGFzZXRDb2RlOiAnbmYtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ05vcnRoIE1hY2Vkb25pYScsIGlzbzNDb2RlOiAnTUtEJywgaXNvMkNvZGU6ICdNSycsIGRhdGFzZXRDb2RlOiAnbWstYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTm9ydGggTWFjZWRvbmlhJywgaXNvM0NvZGU6ICdNS0QnLCBpc28yQ29kZTogJ01LJywgZGF0YXNldENvZGU6ICdtay1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzJywgaXNvM0NvZGU6ICdNTlAnLCBpc28yQ29kZTogJ01QJywgZGF0YXNldENvZGU6ICdtcC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnTm9yd2F5JywgaXNvM0NvZGU6ICdOT1InLCBpc28yQ29kZTogJ05PJywgZGF0YXNldENvZGU6ICduby1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3ZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdOb3J3YXknLCBpc28zQ29kZTogJ05PUicsIGlzbzJDb2RlOiAnTk8nLCBkYXRhc2V0Q29kZTogJ25vLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdPbWFuJywgaXNvM0NvZGU6ICdPTU4nLCBpc28yQ29kZTogJ09NJywgZGF0YXNldENvZGU6ICdvbS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdPbWFuJywgaXNvM0NvZGU6ICdPTU4nLCBpc28yQ29kZTogJ09NJywgZGF0YXNldENvZGU6ICdvbS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUGFraXN0YW4nLCBpc28zQ29kZTogJ1BBSycsIGlzbzJDb2RlOiAnUEsnLCBkYXRhc2V0Q29kZTogJ3BrLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1Bha2lzdGFuJywgaXNvM0NvZGU6ICdQQUsnLCBpc28yQ29kZTogJ1BLJywgZGF0YXNldENvZGU6ICdway1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUGFsYXUnLCBpc28zQ29kZTogJ1BMVycsIGlzbzJDb2RlOiAnUFcnLCBkYXRhc2V0Q29kZTogJ3B3LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdQYWxlc3RpbmUnLCBpc28zQ29kZTogJ1BTRScsIGlzbzJDb2RlOiAnUFMnLCBkYXRhc2V0Q29kZTogJ3BzLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdQYW5hbWEnLCBpc28zQ29kZTogJ1BBTicsIGlzbzJDb2RlOiAnUEEnLCBkYXRhc2V0Q29kZTogJ3BhLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1BhbmFtYScsIGlzbzNDb2RlOiAnUEFOJywgaXNvMkNvZGU6ICdQQScsIGRhdGFzZXRDb2RlOiAncGEtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1BhcHVhIE5ldyBHdWluZWEnLCBpc28zQ29kZTogJ1BORycsIGlzbzJDb2RlOiAnUEcnLCBkYXRhc2V0Q29kZTogJ3BnLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1BhcHVhIE5ldyBHdWluZWEnLCBpc28zQ29kZTogJ1BORycsIGlzbzJDb2RlOiAnUEcnLCBkYXRhc2V0Q29kZTogJ3BnLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdQYXJhZ3VheScsIGlzbzNDb2RlOiAnUFJZJywgaXNvMkNvZGU6ICdQWScsIGRhdGFzZXRDb2RlOiAncHktYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUGFyYWd1YXknLCBpc28zQ29kZTogJ1BSWScsIGlzbzJDb2RlOiAnUFknLCBkYXRhc2V0Q29kZTogJ3B5LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdQZXJ1JywgaXNvM0NvZGU6ICdQRVInLCBpc28yQ29kZTogJ1BFJywgZGF0YXNldENvZGU6ICdwZS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdQZXJ1JywgaXNvM0NvZGU6ICdQRVInLCBpc28yQ29kZTogJ1BFJywgZGF0YXNldENvZGU6ICdwZS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUGhpbGlwcGluZXMnLCBpc28zQ29kZTogJ1BITCcsIGlzbzJDb2RlOiAnUEgnLCBkYXRhc2V0Q29kZTogJ3BoLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1BoaWxpcHBpbmVzJywgaXNvM0NvZGU6ICdQSEwnLCBpc28yQ29kZTogJ1BIJywgZGF0YXNldENvZGU6ICdwaC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUGl0Y2Fpcm4gSXNsYW5kcycsIGlzbzNDb2RlOiAnUENOJywgaXNvMkNvZGU6ICdQTicsIGRhdGFzZXRDb2RlOiAncG4tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1BvbGFuZCcsIGlzbzNDb2RlOiAnUE9MJywgaXNvMkNvZGU6ICdQTCcsIGRhdGFzZXRDb2RlOiAncGwtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUG9sYW5kJywgaXNvM0NvZGU6ICdQT0wnLCBpc28yQ29kZTogJ1BMJywgZGF0YXNldENvZGU6ICdwbC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUG9ydHVnYWwnLCBpc28zQ29kZTogJ1BSVCcsIGlzbzJDb2RlOiAnUFQnLCBkYXRhc2V0Q29kZTogJ3B0LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1BvcnR1Z2FsJywgaXNvM0NvZGU6ICdQUlQnLCBpc28yQ29kZTogJ1BUJywgZGF0YXNldENvZGU6ICdwdC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUWF0YXInLCBpc28zQ29kZTogJ1FBVCcsIGlzbzJDb2RlOiAnUUEnLCBkYXRhc2V0Q29kZTogJ3FhLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1FhdGFyJywgaXNvM0NvZGU6ICdRQVQnLCBpc28yQ29kZTogJ1FBJywgZGF0YXNldENvZGU6ICdxYS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUm9tYW5pYScsIGlzbzNDb2RlOiAnUk9VJywgaXNvMkNvZGU6ICdSTycsIGRhdGFzZXRDb2RlOiAncm8tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUm9tYW5pYScsIGlzbzNDb2RlOiAnUk9VJywgaXNvMkNvZGU6ICdSTycsIGRhdGFzZXRDb2RlOiAncm8tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1J1c3NpYW4gRmVkZXJhdGlvbicsIGlzbzNDb2RlOiAnUlVTJywgaXNvMkNvZGU6ICdSVScsIGRhdGFzZXRDb2RlOiAncnUtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUnVzc2lhbiBGZWRlcmF0aW9uJywgaXNvM0NvZGU6ICdSVVMnLCBpc28yQ29kZTogJ1JVJywgZGF0YXNldENvZGU6ICdydS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnUndhbmRhJywgaXNvM0NvZGU6ICdSV0EnLCBpc28yQ29kZTogJ1JXJywgZGF0YXNldENvZGU6ICdydy1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdSd2FuZGEnLCBpc28zQ29kZTogJ1JXQScsIGlzbzJDb2RlOiAnUlcnLCBkYXRhc2V0Q29kZTogJ3J3LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdSw6l1bmlvbicsIGlzbzNDb2RlOiAnUkVVJywgaXNvMkNvZGU6ICdSRScsIGRhdGFzZXRDb2RlOiAncmUtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1NhaW50IEJhcnRow6lsZW15JywgaXNvM0NvZGU6ICdCTE0nLCBpc28yQ29kZTogJ0JMJywgZGF0YXNldENvZGU6ICdibC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU2FpbnQgSGVsZW5hJywgaXNvM0NvZGU6ICdTSE4nLCBpc28yQ29kZTogJ1NIJywgZGF0YXNldENvZGU6ICdzaC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU2FpbnQgS2l0dHMgYW5kIE5ldmlzJywgaXNvM0NvZGU6ICdLTkEnLCBpc28yQ29kZTogJ0tOJywgZGF0YXNldENvZGU6ICdrbi1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdTYWludCBLaXR0cyBhbmQgTmV2aXMnLCBpc28zQ29kZTogJ0tOQScsIGlzbzJDb2RlOiAnS04nLCBkYXRhc2V0Q29kZTogJ2tuLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTYWludCBMdWNpYScsIGlzbzNDb2RlOiAnTENBJywgaXNvMkNvZGU6ICdMQycsIGRhdGFzZXRDb2RlOiAnbGMtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1NhaW50IFBpZXJyZSBhbmQgTWlxdWVsb24nLCBpc28zQ29kZTogJ1NQTScsIGlzbzJDb2RlOiAnUE0nLCBkYXRhc2V0Q29kZTogJ3BtLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lcycsIGlzbzNDb2RlOiAnVkNUJywgaXNvMkNvZGU6ICdWQycsIGRhdGFzZXRDb2RlOiAndmMtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXMnLCBpc28zQ29kZTogJ1ZDVCcsIGlzbzJDb2RlOiAnVkMnLCBkYXRhc2V0Q29kZTogJ3ZjLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTYW1vYScsIGlzbzNDb2RlOiAnV1NNJywgaXNvMkNvZGU6ICdXUycsIGRhdGFzZXRDb2RlOiAnd3MtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU2Ftb2EnLCBpc28zQ29kZTogJ1dTTScsIGlzbzJDb2RlOiAnV1MnLCBkYXRhc2V0Q29kZTogJ3dzLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTYW4gTWFyaW5vJywgaXNvM0NvZGU6ICdTTVInLCBpc28yQ29kZTogJ1NNJywgZGF0YXNldENvZGU6ICdzbS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdTYW4gTWFyaW5vJywgaXNvM0NvZGU6ICdTTVInLCBpc28yQ29kZTogJ1NNJywgZGF0YXNldENvZGU6ICdzbS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU2FvIFRvbWUgYW5kIFByaW5jaXBlJywgaXNvM0NvZGU6ICdTVFAnLCBpc28yQ29kZTogJ1NUJywgZGF0YXNldENvZGU6ICdzdC1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdTYW8gVG9tZSBhbmQgUHJpbmNpcGUnLCBpc28zQ29kZTogJ1NUUCcsIGlzbzJDb2RlOiAnU1QnLCBkYXRhc2V0Q29kZTogJ3N0LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTYXVkaSBBcmFiaWEnLCBpc28zQ29kZTogJ1NBVScsIGlzbzJDb2RlOiAnU0EnLCBkYXRhc2V0Q29kZTogJ3NhLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1NhdWRpIEFyYWJpYScsIGlzbzNDb2RlOiAnU0FVJywgaXNvMkNvZGU6ICdTQScsIGRhdGFzZXRDb2RlOiAnc2EtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1NlbmVnYWwnLCBpc28zQ29kZTogJ1NFTicsIGlzbzJDb2RlOiAnU04nLCBkYXRhc2V0Q29kZTogJ3NuLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1NlbmVnYWwnLCBpc28zQ29kZTogJ1NFTicsIGlzbzJDb2RlOiAnU04nLCBkYXRhc2V0Q29kZTogJ3NuLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTZXJiaWEnLCBpc28zQ29kZTogJ1NSQicsIGlzbzJDb2RlOiAnUlMnLCBkYXRhc2V0Q29kZTogJ3JzLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1NlcmJpYScsIGlzbzNDb2RlOiAnU1JCJywgaXNvMkNvZGU6ICdSUycsIGRhdGFzZXRDb2RlOiAncnMtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1NleWNoZWxsZXMnLCBpc28zQ29kZTogJ1NZQycsIGlzbzJDb2RlOiAnU0MnLCBkYXRhc2V0Q29kZTogJ3NjLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1NleWNoZWxsZXMnLCBpc28zQ29kZTogJ1NZQycsIGlzbzJDb2RlOiAnU0MnLCBkYXRhc2V0Q29kZTogJ3NjLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTaWVycmEgTGVvbmUnLCBpc28zQ29kZTogJ1NMRScsIGlzbzJDb2RlOiAnU0wnLCBkYXRhc2V0Q29kZTogJ3NsLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1NpZXJyYSBMZW9uZScsIGlzbzNDb2RlOiAnU0xFJywgaXNvMkNvZGU6ICdTTCcsIGRhdGFzZXRDb2RlOiAnc2wtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1NpbmdhcG9yZScsIGlzbzNDb2RlOiAnU0dQJywgaXNvMkNvZGU6ICdTRycsIGRhdGFzZXRDb2RlOiAnc2ctYWRkcmVzcycsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUsIHNpbmdsZWxpbmUsIHR5cGVkb3duLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU2ludCBNYWFydGVuJywgaXNvM0NvZGU6ICdTWE0nLCBpc28yQ29kZTogJ1NYJywgZGF0YXNldENvZGU6ICdzeC1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdTaW50IE1hYXJ0ZW4nLCBpc28zQ29kZTogJ1NYTScsIGlzbzJDb2RlOiAnU1gnLCBkYXRhc2V0Q29kZTogJ3N4LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTbG92YWtpYScsIGlzbzNDb2RlOiAnU1ZLJywgaXNvMkNvZGU6ICdTSycsIGRhdGFzZXRDb2RlOiAnc2stYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU2xvdmFraWEnLCBpc28zQ29kZTogJ1NWSycsIGlzbzJDb2RlOiAnU0snLCBkYXRhc2V0Q29kZTogJ3NrLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTbG92ZW5pYScsIGlzbzNDb2RlOiAnU1ZOJywgaXNvMkNvZGU6ICdTSScsIGRhdGFzZXRDb2RlOiAnc2ktYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU2xvdmVuaWEnLCBpc28zQ29kZTogJ1NWTicsIGlzbzJDb2RlOiAnU0knLCBkYXRhc2V0Q29kZTogJ3NpLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTb2xvbW9uIElzbGFuZHMnLCBpc28zQ29kZTogJ1NMQicsIGlzbzJDb2RlOiAnU0InLCBkYXRhc2V0Q29kZTogJ3NiLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1NvbG9tb24gSXNsYW5kcycsIGlzbzNDb2RlOiAnU0xCJywgaXNvMkNvZGU6ICdTQicsIGRhdGFzZXRDb2RlOiAnc2ItYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1NvbWFsaWEnLCBpc28zQ29kZTogJ1NPTScsIGlzbzJDb2RlOiAnU08nLCBkYXRhc2V0Q29kZTogJ3NvLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1NvbWFsaWEnLCBpc28zQ29kZTogJ1NPTScsIGlzbzJDb2RlOiAnU08nLCBkYXRhc2V0Q29kZTogJ3NvLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTb3V0aCBBZnJpY2EnLCBpc28zQ29kZTogJ1pBRicsIGlzbzJDb2RlOiAnWkEnLCBkYXRhc2V0Q29kZTogJ3phLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1NvdXRoIEFmcmljYScsIGlzbzNDb2RlOiAnWkFGJywgaXNvMkNvZGU6ICdaQScsIGRhdGFzZXRDb2RlOiAnemEtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1NvdXRoIEdlb3JnaWEgYW5kIHRoZSBTb3V0aCBTYW5kd2ljaCBJc2xhbmRzJywgaXNvM0NvZGU6ICdTR1MnLCBpc28yQ29kZTogJ0dTJywgZGF0YXNldENvZGU6ICdncy1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU291dGggU3VkYW4nLCBpc28zQ29kZTogJ1NTRCcsIGlzbzJDb2RlOiAnU1MnLCBkYXRhc2V0Q29kZTogJ3NzLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1NvdXRoIFN1ZGFuJywgaXNvM0NvZGU6ICdTU0QnLCBpc28yQ29kZTogJ1NTJywgZGF0YXNldENvZGU6ICdzcy1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU3BhaW4nLCBpc28zQ29kZTogJ0VTUCcsIGlzbzJDb2RlOiAnRVMnLCBkYXRhc2V0Q29kZTogJ2VzLWFkZHJlc3MnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdHlwZWRvd24nfSxcclxuICB7Y291bnRyeTogJ1NwYWluJywgaXNvM0NvZGU6ICdFU1AnLCBpc28yQ29kZTogJ0VTJywgZGF0YXNldENvZGU6ICdlcy1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3ZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdTcGFpbicsIGlzbzNDb2RlOiAnRVNQJywgaXNvMkNvZGU6ICdFUycsIGRhdGFzZXRDb2RlOiAnZXMtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1NyaSBMYW5rYScsIGlzbzNDb2RlOiAnTEtBJywgaXNvMkNvZGU6ICdMSycsIGRhdGFzZXRDb2RlOiAnbGstYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU3VkYW4nLCBpc28zQ29kZTogJ1NETicsIGlzbzJDb2RlOiAnU0QnLCBkYXRhc2V0Q29kZTogJ3NkLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1N1ZGFuJywgaXNvM0NvZGU6ICdTRE4nLCBpc28yQ29kZTogJ1NEJywgZGF0YXNldENvZGU6ICdzZC1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU3VyaW5hbWUnLCBpc28zQ29kZTogJ1NVUicsIGlzbzJDb2RlOiAnU1InLCBkYXRhc2V0Q29kZTogJ3NyLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1N1cmluYW1lJywgaXNvM0NvZGU6ICdTVVInLCBpc28yQ29kZTogJ1NSJywgZGF0YXNldENvZGU6ICdzci1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU3ZhbGJhcmQgYW5kIEphbiBNYXllbiBJc2xhbmRzJywgaXNvM0NvZGU6ICdTSk0nLCBpc28yQ29kZTogJ1NKJywgZGF0YXNldENvZGU6ICdzai1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU3dhemlsYW5kIChFc3dhdGluaSknLCBpc28zQ29kZTogJ1NXWicsIGlzbzJDb2RlOiAnU1onLCBkYXRhc2V0Q29kZTogJ3N6LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1N3YXppbGFuZCAoRXN3YXRpbmkpJywgaXNvM0NvZGU6ICdTV1onLCBpc28yQ29kZTogJ1NaJywgZGF0YXNldENvZGU6ICdzei1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU3dlZGVuJywgaXNvM0NvZGU6ICdTV0UnLCBpc28yQ29kZTogJ1NFJywgZGF0YXNldENvZGU6ICdzZS1hZGRyZXNzJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHR5cGVkb3duJ30sXHJcbiAge2NvdW50cnk6ICdTd2VkZW4nLCBpc28zQ29kZTogJ1NXRScsIGlzbzJDb2RlOiAnU0UnLCBkYXRhc2V0Q29kZTogJ3NlLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAndmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1N3ZWRlbicsIGlzbzNDb2RlOiAnU1dFJywgaXNvMkNvZGU6ICdTRScsIGRhdGFzZXRDb2RlOiAnc2UtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1N3aXR6ZXJsYW5kJywgaXNvM0NvZGU6ICdDSEUnLCBpc28yQ29kZTogJ0NIJywgZGF0YXNldENvZGU6ICdjaC1hZGRyZXNzJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHR5cGVkb3duJ30sXHJcbiAge2NvdW50cnk6ICdTd2l0emVybGFuZCcsIGlzbzNDb2RlOiAnQ0hFJywgaXNvMkNvZGU6ICdDSCcsIGRhdGFzZXRDb2RlOiAnY2gtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICd2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU3dpdHplcmxhbmQnLCBpc28zQ29kZTogJ0NIRScsIGlzbzJDb2RlOiAnQ0gnLCBkYXRhc2V0Q29kZTogJ2NoLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdTeXJpYScsIGlzbzNDb2RlOiAnU1lSJywgaXNvMkNvZGU6ICdTWScsIGRhdGFzZXRDb2RlOiAnc3ktYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnU3lyaWEnLCBpc28zQ29kZTogJ1NZUicsIGlzbzJDb2RlOiAnU1knLCBkYXRhc2V0Q29kZTogJ3N5LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdUYWl3YW4nLCBpc28zQ29kZTogJ1RXTicsIGlzbzJDb2RlOiAnVFcnLCBkYXRhc2V0Q29kZTogJ3R3LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1RhaXdhbicsIGlzbzNDb2RlOiAnVFdOJywgaXNvMkNvZGU6ICdUVycsIGRhdGFzZXRDb2RlOiAndHctYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1RhamlraXN0YW4nLCBpc28zQ29kZTogJ1RKSycsIGlzbzJDb2RlOiAnVEonLCBkYXRhc2V0Q29kZTogJ3RqLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1RhamlraXN0YW4nLCBpc28zQ29kZTogJ1RKSycsIGlzbzJDb2RlOiAnVEonLCBkYXRhc2V0Q29kZTogJ3RqLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdUYW56YW5pYScsIGlzbzNDb2RlOiAnVFpBJywgaXNvMkNvZGU6ICdUWicsIGRhdGFzZXRDb2RlOiAndHotYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVGFuemFuaWEnLCBpc28zQ29kZTogJ1RaQScsIGlzbzJDb2RlOiAnVFonLCBkYXRhc2V0Q29kZTogJ3R6LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdUaGFpbGFuZCcsIGlzbzNDb2RlOiAnVEhBJywgaXNvMkNvZGU6ICdUSCcsIGRhdGFzZXRDb2RlOiAndGgtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVGhhaWxhbmQnLCBpc28zQ29kZTogJ1RIQScsIGlzbzJDb2RlOiAnVEgnLCBkYXRhc2V0Q29kZTogJ3RoLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdUaW1vci1MZXN0ZScsIGlzbzNDb2RlOiAnVExTJywgaXNvMkNvZGU6ICdUTCcsIGRhdGFzZXRDb2RlOiAndGwtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVGltb3ItTGVzdGUnLCBpc28zQ29kZTogJ1RMUycsIGlzbzJDb2RlOiAnVEwnLCBkYXRhc2V0Q29kZTogJ3RsLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdUb2dvJywgaXNvM0NvZGU6ICdUR08nLCBpc28yQ29kZTogJ1RHJywgZGF0YXNldENvZGU6ICd0Zy1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdUb2dvJywgaXNvM0NvZGU6ICdUR08nLCBpc28yQ29kZTogJ1RHJywgZGF0YXNldENvZGU6ICd0Zy1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVG9rZWxhdScsIGlzbzNDb2RlOiAnVEtMJywgaXNvMkNvZGU6ICdUSycsIGRhdGFzZXRDb2RlOiAndGstYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVG9rZWxhdScsIGlzbzNDb2RlOiAnVEtMJywgaXNvMkNvZGU6ICdUSycsIGRhdGFzZXRDb2RlOiAndGstYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1RvbmdhJywgaXNvM0NvZGU6ICdUT04nLCBpc28yQ29kZTogJ1RPJywgZGF0YXNldENvZGU6ICd0by1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdUb25nYScsIGlzbzNDb2RlOiAnVE9OJywgaXNvMkNvZGU6ICdUTycsIGRhdGFzZXRDb2RlOiAndG8tYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1RyaW5pZGFkIGFuZCBUb2JhZ28nLCBpc28zQ29kZTogJ1RUTycsIGlzbzJDb2RlOiAnVFQnLCBkYXRhc2V0Q29kZTogJ3R0LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1RyaW5pZGFkIGFuZCBUb2JhZ28nLCBpc28zQ29kZTogJ1RUTycsIGlzbzJDb2RlOiAnVFQnLCBkYXRhc2V0Q29kZTogJ3R0LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdUdW5pc2lhJywgaXNvM0NvZGU6ICdUVU4nLCBpc28yQ29kZTogJ1ROJywgZGF0YXNldENvZGU6ICd0bi1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdUdW5pc2lhJywgaXNvM0NvZGU6ICdUVU4nLCBpc28yQ29kZTogJ1ROJywgZGF0YXNldENvZGU6ICd0bi1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVHVya2V5JywgaXNvM0NvZGU6ICdUVVInLCBpc28yQ29kZTogJ1RSJywgZGF0YXNldENvZGU6ICd0ci1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdUdXJrZXknLCBpc28zQ29kZTogJ1RVUicsIGlzbzJDb2RlOiAnVFInLCBkYXRhc2V0Q29kZTogJ3RyLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdUdXJraXNoIFJlcHVibGljIG9mIE5vcnRoZXJuIEN5cHJ1cycsIGlzbzNDb2RlOiAnTkNZJywgaXNvMkNvZGU6ICdDWScsIGRhdGFzZXRDb2RlOiAnbnktYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1R1cmttZW5pc3RhbicsIGlzbzNDb2RlOiAnVEtNJywgaXNvMkNvZGU6ICdUTScsIGRhdGFzZXRDb2RlOiAndG0tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVHVya21lbmlzdGFuJywgaXNvM0NvZGU6ICdUS00nLCBpc28yQ29kZTogJ1RNJywgZGF0YXNldENvZGU6ICd0bS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzJywgaXNvM0NvZGU6ICdUQ0EnLCBpc28yQ29kZTogJ1RDJywgZGF0YXNldENvZGU6ICd0Yy1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVHV2YWx1JywgaXNvM0NvZGU6ICdUVVYnLCBpc28yQ29kZTogJ1RWJywgZGF0YXNldENvZGU6ICd0di1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdUdXZhbHUnLCBpc28zQ29kZTogJ1RVVicsIGlzbzJDb2RlOiAnVFYnLCBkYXRhc2V0Q29kZTogJ3R2LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdVZ2FuZGEnLCBpc28zQ29kZTogJ1VHQScsIGlzbzJDb2RlOiAnVUcnLCBkYXRhc2V0Q29kZTogJ3VnLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1VnYW5kYScsIGlzbzNDb2RlOiAnVUdBJywgaXNvMkNvZGU6ICdVRycsIGRhdGFzZXRDb2RlOiAndWctYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1VrcmFpbmUnLCBpc28zQ29kZTogJ1VLUicsIGlzbzJDb2RlOiAnVUEnLCBkYXRhc2V0Q29kZTogJ3VhLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1VrcmFpbmUnLCBpc28zQ29kZTogJ1VLUicsIGlzbzJDb2RlOiAnVUEnLCBkYXRhc2V0Q29kZTogJ3VhLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdVbml0ZWQgQXJhYiBFbWlyYXRlcycsIGlzbzNDb2RlOiAnQVJFJywgaXNvMkNvZGU6ICdBRScsIGRhdGFzZXRDb2RlOiAnYWUtYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMnLCBpc28zQ29kZTogJ0FSRScsIGlzbzJDb2RlOiAnQUUnLCBkYXRhc2V0Q29kZTogJ2FlLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdVbml0ZWQgS2luZ2RvbScsIGlzbzNDb2RlOiAnR0JSJywgaXNvMkNvZGU6ICdHQicsIGRhdGFzZXRDb2RlOiBbJ2diLWFkZHJlc3MnXSwgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSwgbG9va3VwdjInfSxcclxuICB7Y291bnRyeTogJ1VuaXRlZCBLaW5nZG9tJywgaXNvM0NvZGU6ICdHQlInLCBpc28yQ29kZTogJ0dCJywgZGF0YXNldENvZGU6IFsnZ2ItYWRkaXRpb25hbC1idXNpbmVzcycsICdnYi1hZGRpdGlvbmFsLW11bHRpcGxlcmVzaWRlbmNlJywgJ2diLWFkZGl0aW9uYWwtbm90eWV0YnVpbHQnXSwgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUnfSxcclxuICB7Y291bnRyeTogJ1VuaXRlZCBLaW5nZG9tIEFkZHJlc3NCYXNlIFByZW1pdW0nLCBpc28zQ29kZTogJ0dCUicsIGlzbzJDb2RlOiAnR0InLCBkYXRhc2V0Q29kZTogJ2diLWFkZHJlc3MtYWRkcmVzc2Jhc2UnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdHlwZWRvd24sIHZhbGlkYXRlLCBsb29rdXAnfSxcclxuICB7Y291bnRyeTogJ1VuaXRlZCBLaW5nZG9tIEFkZHJlc3NCYXNlIFByZW1pdW0gd2l0aCBJc2xhbmRzJywgaXNvM0NvZGU6ICdHQlInLCBpc28yQ29kZTogJ0dCJywgZGF0YXNldENvZGU6ICdnYi1hZGRpdGlvbmFsLWFkZHJlc3NiYXNlaXNsYW5kcycsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB0eXBlZG93biwgdmFsaWRhdGUsIGxvb2t1cCd9LFxyXG4gIHtjb3VudHJ5OiAnVW5pdGVkIEtpbmdkb20gQnVzaW5lc3MgTmFtZXMnLCBpc28zQ29kZTogJ0dCUicsIGlzbzJDb2RlOiAnR0InLCBkYXRhc2V0Q29kZTogJ2diLWFkZGl0aW9uYWwtYnVzaW5lc3MnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdHlwZWRvd24nfSxcclxuICB7Y291bnRyeTogJ1VuaXRlZCBLaW5nZG9tIEVsZWN0cmljaXR5JywgaXNvM0NvZGU6ICdHQlInLCBpc28yQ29kZTogJ0dCJywgZGF0YXNldENvZGU6ICdnYi1hZGRpdGlvbmFsLWVsZWN0cmljaXR5Jywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHR5cGVkb3duLCB2YWxpZGF0ZSwgbG9va3VwJ30sXHJcbiAge2NvdW50cnk6ICdVbml0ZWQgS2luZ2RvbSBHYXMnLCBpc28zQ29kZTogJ0dCUicsIGlzbzJDb2RlOiAnR0InLCBkYXRhc2V0Q29kZTogJ2diLWFkZGl0aW9uYWwtZ2FzJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHR5cGVkb3duLCB2YWxpZGF0ZSwgbG9va3VwJ30sXHJcbiAge2NvdW50cnk6ICdVbml0ZWQgS2luZ2RvbSBTdHJlZXQgTGV2ZWwnLCBpc28zQ29kZTogJ0dCUicsIGlzbzJDb2RlOiAnR0InLCBkYXRhc2V0Q29kZTogJ2diLWFkZHJlc3Mtc3RyZWV0bGV2ZWwnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdHlwZWRvd24nfSxcclxuICB7Y291bnRyeTogJ1VuaXRlZCBLaW5nZG9tIEV4dGVuZGVkIEJ1c2luZXNzJywgaXNvM0NvZGU6ICdHQlInLCBpc28yQ29kZTogJ0dCJywgZGF0YXNldENvZGU6ICdnYi1hZGRpdGlvbmFsLWJ1c2luZXNzZXh0ZW5kZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdHlwZWRvd24sIHZhbGlkYXRlLCBsb29rdXAnfSxcclxuICB7Y291bnRyeTogJ1VuaXRlZCBLaW5nZG9tIEN5bXJhZWcgKFdlbHNoIExhbmd1YWdlKSBQb3N0YWwgQWRkcmVzcycsIGlzbzNDb2RlOiAnR0JSJywgaXNvMkNvZGU6ICdHQicsIGRhdGFzZXRDb2RlOiAnZ2ItYWRkcmVzcy13YWxlcycsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB0eXBlZG93biwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1VuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYScsIGlzbzNDb2RlOiAnVVNBJywgaXNvMkNvZGU6ICdVUycsIGRhdGFzZXRDb2RlOiAndXMtYWRkcmVzcycsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUsIHNpbmdsZWxpbmUsIHR5cGVkb3duLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVXJ1Z3VheScsIGlzbzNDb2RlOiAnVVJZJywgaXNvMkNvZGU6ICdVWScsIGRhdGFzZXRDb2RlOiAndXktYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVXJ1Z3VheScsIGlzbzNDb2RlOiAnVVJZJywgaXNvMkNvZGU6ICdVWScsIGRhdGFzZXRDb2RlOiAndXktYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1V6YmVraXN0YW4nLCBpc28zQ29kZTogJ1VaQicsIGlzbzJDb2RlOiAnVVonLCBkYXRhc2V0Q29kZTogJ3V6LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1V6YmVraXN0YW4nLCBpc28zQ29kZTogJ1VaQicsIGlzbzJDb2RlOiAnVVonLCBkYXRhc2V0Q29kZTogJ3V6LWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdWYW51YXR1JywgaXNvM0NvZGU6ICdWVVQnLCBpc28yQ29kZTogJ1ZVJywgZGF0YXNldENvZGU6ICd2dS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdWYW51YXR1JywgaXNvM0NvZGU6ICdWVVQnLCBpc28yQ29kZTogJ1ZVJywgZGF0YXNldENvZGU6ICd2dS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVmF0aWNhbiBDaXR5IChIb2x5IFNlZSknLCBpc28zQ29kZTogJ1ZBVCcsIGlzbzJDb2RlOiAnVkEnLCBkYXRhc2V0Q29kZTogJ3ZhLWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1ZhdGljYW4gQ2l0eSAoSG9seSBTZWUpJywgaXNvM0NvZGU6ICdWQVQnLCBpc28yQ29kZTogJ1ZBJywgZGF0YXNldENvZGU6ICd2YS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVmVuZXp1ZWxhJywgaXNvM0NvZGU6ICdWRU4nLCBpc28yQ29kZTogJ1ZFJywgZGF0YXNldENvZGU6ICd2ZS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdWZW5lenVlbGEnLCBpc28zQ29kZTogJ1ZFTicsIGlzbzJDb2RlOiAnVkUnLCBkYXRhc2V0Q29kZTogJ3ZlLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdWaWV0IE5hbScsIGlzbzNDb2RlOiAnVk5NJywgaXNvMkNvZGU6ICdWTicsIGRhdGFzZXRDb2RlOiAndm4tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnVmlldCBOYW0nLCBpc28zQ29kZTogJ1ZOTScsIGlzbzJDb2RlOiAnVk4nLCBkYXRhc2V0Q29kZTogJ3ZuLWFkZHJlc3MtZWgnLCBzZWFyY2hUeXBlOiAnYXV0b2NvbXBsZXRlJ30sXHJcbiAge2NvdW50cnk6ICdWaXJnaW4gSXNsYW5kcywgQnJpdGlzaCcsIGlzbzNDb2RlOiAnVkdCJywgaXNvMkNvZGU6ICdWRycsIGRhdGFzZXRDb2RlOiAndmctYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1ZpcmdpbiBJc2xhbmRzLCBVLlMuJywgaXNvM0NvZGU6ICdWSVInLCBpc28yQ29kZTogJ1ZJJywgZGF0YXNldENvZGU6ICd2aS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnV2FsbGlzIGFuZCBGdXR1bmEgSXNsYW5kcycsIGlzbzNDb2RlOiAnV0xGJywgaXNvMkNvZGU6ICdXRicsIGRhdGFzZXRDb2RlOiAnd2YtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1dlc3Rlcm4gU2FoYXJhJywgaXNvM0NvZGU6ICdFU0gnLCBpc28yQ29kZTogJ0VIJywgZGF0YXNldENvZGU6ICdlaC1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdXZXN0ZXJuIFNhaGFyYScsIGlzbzNDb2RlOiAnRVNIJywgaXNvMkNvZGU6ICdFSCcsIGRhdGFzZXRDb2RlOiAnZWgtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1llbWVuJywgaXNvM0NvZGU6ICdZRU0nLCBpc28yQ29kZTogJ1lFJywgZGF0YXNldENvZGU6ICd5ZS1hZGRyZXNzLWVkJywgc2VhcmNoVHlwZTogJ3NpbmdsZWxpbmUsIHZhbGlkYXRlJ30sXHJcbiAge2NvdW50cnk6ICdZZW1lbicsIGlzbzNDb2RlOiAnWUVNJywgaXNvMkNvZGU6ICdZRScsIGRhdGFzZXRDb2RlOiAneWUtYWRkcmVzcy1laCcsIHNlYXJjaFR5cGU6ICdhdXRvY29tcGxldGUnfSxcclxuICB7Y291bnRyeTogJ1phbWJpYScsIGlzbzNDb2RlOiAnWk1CJywgaXNvMkNvZGU6ICdaTScsIGRhdGFzZXRDb2RlOiAnem0tYWRkcmVzcy1lZCcsIHNlYXJjaFR5cGU6ICdzaW5nbGVsaW5lLCB2YWxpZGF0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnWmFtYmlhJywgaXNvM0NvZGU6ICdaTUInLCBpc28yQ29kZTogJ1pNJywgZGF0YXNldENvZGU6ICd6bS1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9LFxyXG4gIHtjb3VudHJ5OiAnWmltYmFid2UnLCBpc28zQ29kZTogJ1pXRScsIGlzbzJDb2RlOiAnWlcnLCBkYXRhc2V0Q29kZTogJ3p3LWFkZHJlc3MtZWQnLCBzZWFyY2hUeXBlOiAnc2luZ2xlbGluZSwgdmFsaWRhdGUnfSxcclxuICB7Y291bnRyeTogJ1ppbWJhYndlJywgaXNvM0NvZGU6ICdaV0UnLCBpc28yQ29kZTogJ1pXJywgZGF0YXNldENvZGU6ICd6dy1hZGRyZXNzLWVoJywgc2VhcmNoVHlwZTogJ2F1dG9jb21wbGV0ZSd9XHJcbl07XHJcbiIsIi8vIFRyYW5zbGF0aW9uc1xyXG5leHBvcnQgY29uc3QgdHJhbnNsYXRpb25zID0ge1xyXG4gIC8vIGxhbmd1YWdlIC8gY291bnRyeSAvIHByb3BlcnR5XHJcbiAgZW46IHtcclxuICAgIGdicjoge1xyXG4gICAgICBsb2NhbGl0eTogJ1Rvd24vQ2l0eScsXHJcbiAgICAgIHJlZ2lvbjogJ0NvdW50eScsXHJcbiAgICAgIHBvc3RhbF9jb2RlOiAnUG9zdCBjb2RlJ1xyXG4gICAgfSxcclxuICAgIHVzYToge1xyXG4gICAgICBsb2NhbGl0eTogJ0NpdHknLFxyXG4gICAgICByZWdpb246ICdTdGF0ZScsXHJcbiAgICAgIHBvc3RhbF9jb2RlOiAnWklQIGNvZGUnXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIEFkZCBvdGhlciBsYW5ndWFnZXMgYmVsb3dcclxufTsiLCJleHBvcnQgY2xhc3MgUGlja2xpc3Qge1xyXG4gIGl0ZW1zOiBQaWNrbGlzdEl0ZW1bXTtcclxuICB3aGF0M3dvcmRzSXRlbXM6IFdoYXQzV29yZHNQaWNrTGlzdFtdO1xyXG4gIGxvb2t1cEl0ZW1zOiBMb29rdXBBZGRyZXNzW107XHJcbiAgY3VycmVudEl0ZW07XHJcbiAgbGlzdDogSFRNTERpdkVsZW1lbnQ7XHJcbiAgY29udGFpbmVyOiBIVE1MRWxlbWVudDtcclxuICBzaXplID0gMDtcclxuICBtYXhTdWdnZXN0aW9ucyA9IDI1O1xyXG4gIHNob3c6IChpdGVtczogU2VhcmNoUmVzcG9uc2UpID0+IHZvaWQ7XHJcbiAgc2hvd1doYXQzV29yZHM6IChpdGVtczogTG9va3VwVzNXUmVzcG9uc2UpID0+IHZvaWQ7XHJcbiAgc2hvd0xvb2t1cDogKGl0ZW1zOiBMb29rdXBWMlJlc3BvbnNlKSA9PiB2b2lkO1xyXG4gIGhpZGU6ICgpID0+IHZvaWQ7XHJcbiAgaGFuZGxlRW1wdHlQaWNrbGlzdDogKGl0ZW1zOiBTZWFyY2hSZXNwb25zZSB8IExvb2t1cFczV1Jlc3BvbnNlIHwgTG9va3VwVjJSZXNwb25zZSkgPT4gdm9pZDtcclxuICBoYW5kbGVFbXB0eVBpY2tsaXN0Q2FsbGJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgaGFuZGxlQ29tbW9uU2hvd1BpY2tsaXN0TG9naWM6ICgpID0+IHZvaWQ7XHJcbiAgcmVmaW5lOiBSZWZpbmVtZW50O1xyXG4gIHVzZUFkZHJlc3NFbnRlcmVkOiBVc2VBZGRyZXNzRW50ZXJlZDtcclxuICBjcmVhdGVMaXN0OiAoKSA9PiBIVE1MRGl2RWxlbWVudDtcclxuICBjcmVhdGVMaXN0SXRlbTogKGl0ZW06IFBpY2tsaXN0SXRlbSkgPT4gSFRNTERpdkVsZW1lbnQ7XHJcbiAgY3JlYXRlTG9va3VwTGlzdEl0ZW06IChpdGVtOiBMb29rdXBBZGRyZXNzKSA9PiBIVE1MRGl2RWxlbWVudDtcclxuICBjcmVhdGVXaGF0M1dvcmRzTGlzdEl0ZW06IChpdGVtOiBXaGF0M1dvcmRzUGlja0xpc3QpID0+IEhUTUxEaXZFbGVtZW50O1xyXG4gIHRhYkNvdW50OiBudW1iZXI7XHJcbiAgcmVzZXRUYWJDb3VudDogKCkgPT4gdm9pZDtcclxuICBrZXl1cDogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkO1xyXG4gIGFkZE1hdGNoaW5nRW1waGFzaXM6IChpdGVtKSA9PiBzdHJpbmc7XHJcbiAgbGlzdGVuOiAocm93KSA9PiB2b2lkO1xyXG4gIGNoZWNrRW50ZXI6IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZDtcclxuICBwaWNrOiAoaXRlbSkgPT4gdm9pZDtcclxuICBzY3JvbGxJbnRvVmlld0lmTmVlZGVkOiAoKSA9PiB2b2lkO1xyXG4gIGRpc3BsYXlTdWdnZXN0aW9uc0hlYWRlcjogKCkgPT4gdm9pZDtcclxuICBkaXNwbGF5VXNlQWRkcmVzc0VudGVyZWRGb290ZXI6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBZGRyZXNzVmFsaWRhdGlvblJlc3VsdCB7XHJcbiAgZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lcjtcclxuICBsYXN0QWRkcmVzc0ZpZWxkO1xyXG4gIGdlbmVyYXRlQWRkcmVzc0xpbmVSZXF1aXJlZDogYm9vbGVhbjtcclxuICBzaG93OiAoZGF0YSkgPT4gdm9pZDtcclxuICBoaWRlOiAoKSA9PiB2b2lkO1xyXG4gIGNyZWF0ZUFkZHJlc3NMaW5lOiBDcmVhdGVBZGRyZXNzTGluZTtcclxuICBjcmVhdGVGb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyOiAoKSA9PiB2b2lkO1xyXG4gIGNyZWF0ZUhlYWRpbmc6ICgpID0+IHZvaWQ7XHJcbiAgdXBkYXRlSGVhZGluZzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcclxuICBjYWxjdWxhdGVJZkFkZHJlc3NMaW5lR2VuZXJhdGlvblJlcXVpcmVkOiAoKSA9PiB2b2lkO1xyXG4gIHVwZGF0ZUFkZHJlc3NMaW5lOiAoa2V5OiBzdHJpbmcsIGFkZHJlc3NMaW5lT2JqZWN0LCBjbGFzc05hbWU6IHN0cmluZykgPT4gdm9pZDtcclxuICB1cGRhdGVMYWJlbDogKGtleTogc3RyaW5nKSA9PiBzdHJpbmc7XHJcbiAgY3JlYXRlU2VhcmNoQWdhaW5MaW5rOiAoKSA9PiB2b2lkO1xyXG4gIHJlbmRlcklucHV0TGlzdDogKGlucHV0QXJyYXkpID0+IHZvaWQ7XHJcbiAgaGFuZGxlVmFsaWRhdGVSZXNwb25zZTogKHJlc3BvbnNlOiBTZWFyY2hSZXNwb25zZSkgPT4gdm9pZDtcclxufVxyXG5cclxuY2xhc3MgQ3JlYXRlQWRkcmVzc0xpbmUge1xyXG4gIGlucHV0OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGNsYXNzTmFtZTogc3RyaW5nKSA9PiBIVE1MRGl2RWxlbWVudDtcclxuICBsYWJlbDogKGtleTogc3RyaW5nKSA9PiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzcG9uc2Uge1xyXG4gIHJlc3VsdD86IHtcclxuICAgIHN1Z2dlc3Rpb25zOiBQaWNrbGlzdEl0ZW1bXTtcclxuICAgIHN1Z2dlc3Rpb25zX3Byb21wdD86IHN0cmluZztcclxuICAgIHN1Z2dlc3Rpb25zX2tleT86IHN0cmluZztcclxuICAgIGNvbmZpZGVuY2U6IHN0cmluZztcclxuICAgIGFkZHJlc3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb29rdXBXM1dSZXNwb25zZSB7XHJcbiAgcmVzdWx0Pzoge1xyXG4gICAgbW9yZV9yZXN1bHRzX2F2YWlsYWJsZTogYm9vbGVhbjtcclxuICAgIHN1Z2dlc3Rpb25zOiBXaGF0M1dvcmRzUGlja0xpc3RbXTtcclxuICAgIGNvbmZpZGVuY2U6IHN0cmluZztcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwVjJSZXNwb25zZSB7XHJcbiAgcmVzdWx0Pzoge1xyXG4gICAgbW9yZV9yZXN1bHRzX2F2YWlsYWJsZTogYm9vbGVhbjtcclxuICAgIGNvbmZpZGVuY2U6IHN0cmluZztcclxuICAgIGFkZHJlc3NlczogTG9va3VwQWRkcmVzc1tdO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb29rdXBBZGRyZXNzIHtcclxuICB0ZXh0OiBzdHJpbmc7XHJcbiAgZ2xvYmFsX2FkZHJlc3Nfa2V5OiBzdHJpbmc7XHJcbiAgZm9ybWF0OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV2hhdDNXb3Jkc1BpY2tMaXN0IHtcclxuICB3aGF0M3dvcmRzOiBXaGF0M1dvcmRzU3VnZ2VzdGlvbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXaGF0M1dvcmRzU3VnZ2VzdGlvbiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQaWNrbGlzdEl0ZW0ge1xyXG4gIHRleHQ6IHN0cmluZztcclxuICBmb3JtYXQ/OiBzdHJpbmc7XHJcbiAgbWF0Y2hlZD86IG51bWJlcltdW107XHJcbiAgZ2xvYmFsX2FkZHJlc3Nfa2V5Pzogc3RyaW5nO1xyXG4gIGFkZGl0aW9uYWxfYXR0cmlidXRlcz86IHsgbmFtZTogc3RyaW5nLCBWYWx1ZTogc3RyaW5nIH1bXTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZUFkZHJlc3NFbnRlcmVkIHtcclxuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBjcmVhdGU6IChjb25maWRlbmNlOiBzdHJpbmcpID0+IEhUTUxEaXZFbGVtZW50O1xyXG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XHJcbiAgY2xpY2s6ICgpID0+IHZvaWQ7XHJcbiAgZm9ybWF0TWFudWFsQWRkcmVzc0xpbmU6IChsaW5lcywgaSkgPT4geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlZmluZW1lbnQge1xyXG4gIGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgaXNOZWVkZWQ6IChyZXNwb25zZTogU2VhcmNoUmVzcG9uc2UpID0+IGJvb2xlYW47XHJcbiAgY3JlYXRlSW5wdXQ6IChwcm9tcHQ6IHN0cmluZywga2V5OiBzdHJpbmcpID0+IHZvaWQ7XHJcbiAgZW50ZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hTcGlubmVyIHtcclxuICBzaG93OiAoKSA9PiB2b2lkO1xyXG4gIGhpZGU6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQb3dlcmVkQnlMb2dvIHtcclxuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBjcmVhdGU6IChwaWNrbGlzdCkgPT4gSFRNTERpdkVsZW1lbnQ7XHJcbiAgZGVzdHJveTogKHBpY2tsaXN0KSA9PiB2b2lkO1xyXG4gIHN2Zzogc3RyaW5nO1xyXG59IiwiaW1wb3J0IEV2ZW50RmFjdG9yeSBmcm9tICcuL2V2ZW50LWZhY3RvcnknO1xyXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xyXG5pbXBvcnQgeyBBZGRyZXNzU2VhcmNoT3B0aW9ucywgQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlLCBBZGRyZXNzVmFsaWRhdGlvbk1vZGUsIEFkZHJlc3NWYWxpZGF0aW9uTG9va3VwS2V5d29yZHMsIGRlZmF1bHRzIH0gZnJvbSAnLi9zZWFyY2gtb3B0aW9ucyc7XHJcbmltcG9ydCB7IGRhdGFzZXRDb2RlcyB9IGZyb20gJy4vZGF0YXNldHMtY29kZXMnO1xyXG5pbXBvcnQgeyB0cmFuc2xhdGlvbnMgfSBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XHJcbmltcG9ydCB7IEFkZHJlc3NWYWxpZGF0aW9uUmVzdWx0LCBMb29rdXBBZGRyZXNzLCBMb29rdXBWMlJlc3BvbnNlLCBMb29rdXBXM1dSZXNwb25zZSwgUGlja2xpc3QsIFBpY2tsaXN0SXRlbSwgUG93ZXJlZEJ5TG9nbywgU2VhcmNoUmVzcG9uc2UsIFdoYXQzV29yZHNQaWNrTGlzdCB9IGZyb20gJy4vY2xhc3MtdHlwZXMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRkcmVzc1ZhbGlkYXRpb24ge1xyXG4gIHB1YmxpYyBvcHRpb25zOiBBZGRyZXNzU2VhcmNoT3B0aW9ucztcclxuICBwdWJsaWMgc2VhcmNoVHlwZTogQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlO1xyXG4gIHB1YmxpYyBhdk1vZGU6IEFkZHJlc3NWYWxpZGF0aW9uTW9kZTtcclxuICBwdWJsaWMgZXZlbnRzO1xyXG4gIHB1YmxpYyByZXF1ZXN0OiBSZXF1ZXN0O1xyXG5cclxuICBwcml2YXRlIGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkuZXhwZXJpYW5hcGVydHVyZS5pby8nO1xyXG4gIHByaXZhdGUgc2VhcmNoRW5kcG9pbnQgPSAnYWRkcmVzcy9zZWFyY2gvdjEnO1xyXG4gIHByaXZhdGUgbG9va3VwRW5kcG9pbnQgPSAnYWRkcmVzcy9sb29rdXAvdjInO1xyXG4gIHByaXZhdGUgdmFsaWRhdGVFbmRwb2ludCA9ICdhZGRyZXNzL3ZhbGlkYXRlL3YxJztcclxuICBwcml2YXRlIHByb21wdHNldEVuZHBvaW50ID0gJ2FkZHJlc3MvcHJvbXB0c2V0cy92MSc7XHJcbiAgcHJpdmF0ZSBzdGVwSW5FbmRwb2ludCA9ICdhZGRyZXNzL3N1Z2dlc3Rpb25zL3N0ZXBpbi92MSc7XHJcbiAgcHJpdmF0ZSByZWZpbmVFbmRwb2ludCA9ICdhZGRyZXNzL3N1Z2dlc3Rpb25zL3JlZmluZS92MSc7XHJcbiAgcHJpdmF0ZSBlbnJpY2htZW50RW5kcG9pbnQgPSAnZW5yaWNobWVudC92Mic7XHJcblxyXG4gIHByaXZhdGUgcGlja2xpc3Q6IFBpY2tsaXN0O1xyXG4gIHByaXZhdGUgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W107XHJcbiAgcHJpdmF0ZSBsYXN0U2VhcmNoVGVybTogc3RyaW5nO1xyXG4gIHByaXZhdGUgY3VycmVudFNlYXJjaFRlcm06IHN0cmluZztcclxuICBwcml2YXRlIGN1cnJlbnRDb3VudHJ5Q29kZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgY3VycmVudERhdGFTZXQ6IHN0cmluZyB8IHN0cmluZ1tdO1xyXG4gIHByaXZhdGUgaGFzU2VhcmNoSW5wdXRCZWVuUmVzZXQ6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBjb3VudHJ5Q29kZU1hcHBpbmc7XHJcbiAgcHJpdmF0ZSBsb29rdXBGbjtcclxuICBwcml2YXRlIGtleVVwRm47XHJcbiAgcHJpdmF0ZSBjaGVja1RhYkZuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBBZGRyZXNzU2VhcmNoT3B0aW9ucykge1xyXG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5tZXJnZURlZmF1bHRPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50RmFjdG9yeSgpO1xyXG5cclxuICAgIHRoaXMuc2V0dXAoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm9wdGlvbnMudG9rZW4gPSB0b2tlbjtcclxuICAgIHRoaXMuc2V0dXAoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTZWFyY2hUeXBlKHNlYXJjaFR5cGU6IEFkZHJlc3NWYWxpZGF0aW9uU2VhcmNoVHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hUeXBlID0gc2VhcmNoVHlwZTtcclxuICAgIHRoaXMuZ2xvYmFsUmVzZXQoKTtcclxuICAgIHRoaXMuc2V0SW5wdXRzKCk7XHJcbiAgICB0aGlzLmV2ZW50cy50cmlnZ2VyKCdwb3N0LXNlYXJjaC10eXBlLWNoYW5nZScsIHNlYXJjaFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEVucmljaG1lbnREYXRhKGdsb2JhbEFkZHJlc3NLZXk6IHN0cmluZykge1xyXG4gICAgaWYgKGdsb2JhbEFkZHJlc3NLZXkpIHtcclxuICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICBjb3VudHJ5X2lzbzogdGhpcy5jdXJyZW50Q291bnRyeUNvZGUsXHJcbiAgICAgICAga2V5czoge1xyXG4gICAgICAgICAgZ2xvYmFsX2FkZHJlc3Nfa2V5OiBnbG9iYWxBZGRyZXNzS2V5XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICBnZW9jb2RlczogWydsYXRpdHVkZScsICdsb25naXR1ZGUnLCAnbWF0Y2hfbGV2ZWwnXSxcclxuICAgICAgICAgIHdoYXQzd29yZHM6IHRoaXMuY3VycmVudENvdW50cnlDb2RlID09ICdHQlInID8gWydsYXRpdHVkZScsICdsb25naXR1ZGUnLCAnbmFtZScsICdkZXNjcmlwdGlvbiddIDogbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuZXZlbnRzLnRyaWdnZXIoJ3ByZS1lbnJpY2htZW50Jyk7XHJcbiAgICAgIHRoaXMucmVxdWVzdC5zZW5kKHRoaXMuYmFzZVVybCArIHRoaXMuZW5yaWNobWVudEVuZHBvaW50LCAnUE9TVCcsIHRoaXMuaGFuZGxlRW5yaWNobWVudFJlc3VsdC5iaW5kKHRoaXMpLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwKCk6IHZvaWQge1xyXG4gICAgLy8gR2V0IHRva2VuIGFuZCBwcm9jZWVkIGlmIGl0J3MgcHJlc2VudFxyXG4gICAgaWYgKHRoaXMudG9rZW4pIHtcclxuICAgICAgdGhpcy5oYXNTZWFyY2hJbnB1dEJlZW5SZXNldCA9IHRydWU7XHJcblxyXG4gICAgICAvLyBJbnN0YW50aWF0ZSBhIG5ldyBSZXF1ZXN0IGNsYXNzIGZvciB1c2Ugd2hlbiBtYWtpbmcgQVBJIGNhbGxzXHJcbiAgICAgIHRoaXMucmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHRoaXMpO1xyXG5cclxuICAgICAgLy8gU2V0IHRoZSBjb3VudHJ5IGxpc3RcclxuICAgICAgdGhpcy5zZXRDb3VudHJ5TGlzdCgpO1xyXG5cclxuICAgICAgLy8gU2V0IHRoZSBpbnB1dCBmaWVsZHMgZm9yIHRoaXMgc2VhcmNoIHR5cGVcclxuICAgICAgdGhpcy5zZXRJbnB1dHMoKTtcclxuXHJcbiAgICAgIC8vIFNldHVwIGEgcGlja2xpc3Qgb2JqZWN0XHJcbiAgICAgIHRoaXMuY3JlYXRlUGlja2xpc3QoKTtcclxuXHJcbiAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBzZWFyY2ggbW9kZVxyXG4gICAgICB0aGlzLmF2TW9kZSA9IEFkZHJlc3NWYWxpZGF0aW9uTW9kZS5TRUFSQ0g7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUcmlnZ2VyIGEgNDAxIFVuYXV0aG9yaXplZCBldmVudCBpZiBhIHRva2VuIGRvZXMgbm90IGV4aXN0XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5ldmVudHMudHJpZ2dlcigncmVxdWVzdC1lcnJvci00MDEnKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUVucmljaG1lbnRSZXN1bHQocmVzcG9uc2UpIHtcclxuICAgIHRoaXMuZXZlbnRzLnRyaWdnZXIoJ3Bvc3QtZW5yaWNobWVudCcsIHJlc3BvbnNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFyYW1ldGVyKG5hbWUpOiBzdHJpbmcge1xyXG4gICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvW1tdLywgJ1xcXFxbJykucmVwbGFjZSgvW1xcXV0vLCAnXFxcXF0nKTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgnW1xcXFw/Jl0nICsgbmFtZSArICc9KFteJiNdKiknKSxcclxuICAgICAgcmVzdWx0cyA9IHJlZ2V4LmV4ZWMobG9jYXRpb24uc2VhcmNoKTtcclxuICAgIHJldHVybiByZXN1bHRzID09PSBudWxsID8gJycgOiBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0c1sxXS5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XHJcbiAgfVxyXG5cclxuICAvLyBUcnkgYW5kIGdldCB0b2tlbiBmcm9tIHRoZSBxdWVyeSBzdHJpbmcgaWYgaXQncyBub3QgYWxyZWFkeSBwcm92aWRlZFxyXG4gIHByaXZhdGUgZ2V0IHRva2VuKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy50b2tlbikge1xyXG4gICAgICB0aGlzLm9wdGlvbnMudG9rZW4gPSB0aGlzLmdldFBhcmFtZXRlcigndG9rZW4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudG9rZW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lcmdlRGVmYXVsdE9wdGlvbnMoY3VzdG9tT3B0aW9ucyk6IEFkZHJlc3NTZWFyY2hPcHRpb25zIHtcclxuICAgIGNvbnN0IGluc3RhbmNlOiBBZGRyZXNzU2VhcmNoT3B0aW9ucyA9IGN1c3RvbU9wdGlvbnMgfHwge307XHJcblxyXG4gICAgaW5zdGFuY2UuZW5hYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnNlYXJjaFR5cGUgPSBpbnN0YW5jZS5zZWFyY2hUeXBlIHx8IGRlZmF1bHRzLnNlYXJjaFR5cGU7XHJcbiAgICBpbnN0YW5jZS5zZWFyY2hUeXBlID0gaW5zdGFuY2Uuc2VhcmNoVHlwZSB8fCBkZWZhdWx0cy5zZWFyY2hUeXBlO1xyXG4gICAgaW5zdGFuY2UubGFuZ3VhZ2UgPSBpbnN0YW5jZS5sYW5ndWFnZSB8fCBkZWZhdWx0cy5sYW5ndWFnZTtcclxuICAgIGluc3RhbmNlLnVzZVNwaW5uZXIgPSBpbnN0YW5jZS51c2VTcGlubmVyIHx8IGRlZmF1bHRzLnVzZVNwaW5uZXI7XHJcbiAgICBpbnN0YW5jZS5hcHBseUZvY3VzID0gKHR5cGVvZiBpbnN0YW5jZS5hcHBseUZvY3VzICE9PSAndW5kZWZpbmVkJykgPyBpbnN0YW5jZS5hcHBseUZvY3VzIDogZGVmYXVsdHMuaW5wdXQuYXBwbHlGb2N1cztcclxuICAgIGluc3RhbmNlLnBsYWNlaG9sZGVyVGV4dCA9IGluc3RhbmNlLnBsYWNlaG9sZGVyVGV4dCB8fCBkZWZhdWx0cy5pbnB1dC5wbGFjZWhvbGRlclRleHQ7XHJcbiAgICBpbnN0YW5jZS5zZWFyY2hBZ2FpbiA9IGluc3RhbmNlLnNlYXJjaEFnYWluIHx8IHt9O1xyXG4gICAgaW5zdGFuY2Uuc2VhcmNoQWdhaW4udmlzaWJsZSA9ICh0eXBlb2YgaW5zdGFuY2Uuc2VhcmNoQWdhaW4udmlzaWJsZSAhPT0gJ3VuZGVmaW5lZCcpID8gaW5zdGFuY2Uuc2VhcmNoQWdhaW4udmlzaWJsZSA6IGRlZmF1bHRzLnNlYXJjaEFnYWluLnZpc2libGU7XHJcbiAgICBpbnN0YW5jZS5zZWFyY2hBZ2Fpbi50ZXh0ID0gaW5zdGFuY2Uuc2VhcmNoQWdhaW4udGV4dCB8fCBkZWZhdWx0cy5zZWFyY2hBZ2Fpbi50ZXh0O1xyXG4gICAgaW5zdGFuY2UuZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lciA9IGluc3RhbmNlLmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIgfHwgZGVmYXVsdHMuZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lcjtcclxuICAgIGluc3RhbmNlLmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIuc2hvd0hlYWRpbmcgPSAodHlwZW9mIGluc3RhbmNlLmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIuc2hvd0hlYWRpbmcgIT09ICd1bmRlZmluZWQnKSA/IGluc3RhbmNlLmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIuc2hvd0hlYWRpbmcgOiBkZWZhdWx0cy5mb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyLnNob3dIZWFkaW5nO1xyXG4gICAgaW5zdGFuY2UuZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lci5oZWFkaW5nVHlwZSA9IGluc3RhbmNlLmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIuaGVhZGluZ1R5cGUgfHwgZGVmYXVsdHMuZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lci5oZWFkaW5nVHlwZTtcclxuICAgIGluc3RhbmNlLmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIudmFsaWRhdGVkSGVhZGluZ1RleHQgPSBpbnN0YW5jZS5mb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyLnZhbGlkYXRlZEhlYWRpbmdUZXh0IHx8IGRlZmF1bHRzLmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIudmFsaWRhdGVkSGVhZGluZ1RleHQ7XHJcbiAgICBpbnN0YW5jZS5mb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyLm1hbnVhbEhlYWRpbmdUZXh0ID0gaW5zdGFuY2UuZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lci5tYW51YWxIZWFkaW5nVGV4dCB8fCBkZWZhdWx0cy5mb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyLm1hbnVhbEhlYWRpbmdUZXh0O1xyXG4gICAgaW5zdGFuY2UudXNlQWRkcmVzc0VudGVyZWRUZXh0ID0gaW5zdGFuY2UudXNlQWRkcmVzc0VudGVyZWRUZXh0IHx8IGRlZmF1bHRzLnVzZUFkZHJlc3NFbnRlcmVkVGV4dDtcclxuICAgIGluc3RhbmNlLmVsZW1lbnRzID0gaW5zdGFuY2UuZWxlbWVudHMgfHwge307XHJcblxyXG4gICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQcm9tcHRzZXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q291bnRyeUNvZGUpIHtcclxuICAgICAgLy8gVXNpbmcgdGhlIGNvdW50cnkgY29kZSBhbmQgdGhlIHNlYXJjaCB0eXBlLCBsb29rdXAgd2hhdCB0aGUgcmVsZXZhbnQgZGF0YXNldCBjb2RlIHNob3VsZCBiZVxyXG4gICAgICB0aGlzLmN1cnJlbnREYXRhU2V0ID0gdGhpcy5sb29rdXBEYXRhc2V0Q29kZSgpO1xyXG4gICAgICBpZiAodGhpcy5jdXJyZW50RGF0YVNldCkge1xyXG5cclxuICAgICAgICAvLy8gVGVtcG9yYXJ5IG1lYXN1cmUgdW50aWwgdGhlIHByb21wdHNldCBlbmRwb2ludCBzdXBwb3J0cyBBdXRvY29tcGxldGUgYW5kIFZhbGlkYXRlXHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVHlwZSA9PT0gQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlLkFVVE9DT01QTEVURSkge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmhhbmRsZVByb21wdHNldFJlc3VsdCh7IHJlc3VsdDogeyBsaW5lczogW3sgZXhhbXBsZTogdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyVGV4dCwgcHJvbXB0OiAnQWRkcmVzcycsIHN1Z2dlc3RlZF9pbnB1dF9sZW5ndGg6IDE2MCB9XSB9IH0pKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoVHlwZSA9PT0gQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlLlZBTElEQVRFKSB7XHJcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IFtcclxuICAgICAgICAgICAgeyBwcm9tcHQ6ICdBZGRyZXNzIGxpbmUgMScsIHN1Z2dlc3RlZF9pbnB1dF9sZW5ndGg6IDE2MCB9LFxyXG4gICAgICAgICAgICB7IHByb21wdDogJ0FkZHJlc3MgbGluZSAyJywgc3VnZ2VzdGVkX2lucHV0X2xlbmd0aDogMTYwIH0sXHJcbiAgICAgICAgICAgIHsgcHJvbXB0OiAnQWRkcmVzcyBsaW5lIDMnLCBzdWdnZXN0ZWRfaW5wdXRfbGVuZ3RoOiAxNjAgfSxcclxuICAgICAgICAgICAgeyBwcm9tcHQ6IHRoaXMucmVzdWx0LmNyZWF0ZUFkZHJlc3NMaW5lLmxhYmVsKCdsb2NhbGl0eScpLCBzdWdnZXN0ZWRfaW5wdXRfbGVuZ3RoOiAxNjAgfSxcclxuICAgICAgICAgICAgeyBwcm9tcHQ6IHRoaXMucmVzdWx0LmNyZWF0ZUFkZHJlc3NMaW5lLmxhYmVsKCdyZWdpb24nKSwgc3VnZ2VzdGVkX2lucHV0X2xlbmd0aDogMTYwIH0sXHJcbiAgICAgICAgICAgIHsgcHJvbXB0OiB0aGlzLnJlc3VsdC5jcmVhdGVBZGRyZXNzTGluZS5sYWJlbCgncG9zdGFsX2NvZGUnKSwgc3VnZ2VzdGVkX2lucHV0X2xlbmd0aDogMTYwIH1cclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaGFuZGxlUHJvbXB0c2V0UmVzdWx0KHsgcmVzdWx0OiB7IGxpbmVzIH0gfSkpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgIGNvdW50cnlfaXNvOiB0aGlzLmN1cnJlbnRDb3VudHJ5Q29kZSxcclxuICAgICAgICAgIGRhdGFzZXRzOiBBcnJheS5pc0FycmF5KHRoaXMuY3VycmVudERhdGFTZXQpID8gdGhpcy5jdXJyZW50RGF0YVNldCA6IFt0aGlzLmN1cnJlbnREYXRhU2V0XSxcclxuICAgICAgICAgIHNlYXJjaF90eXBlOiB0aGlzLnNlYXJjaFR5cGUsXHJcbiAgICAgICAgICBwcm9tcHRfc2V0OiAnb3B0aW1hbCdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZXZlbnRzLnRyaWdnZXIoJ3ByZS1wcm9tcHRzZXQtY2hlY2snKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3Quc2VuZCh0aGlzLmJhc2VVcmwgKyB0aGlzLnByb21wdHNldEVuZHBvaW50LCAnUE9TVCcsIHRoaXMuaGFuZGxlUHJvbXB0c2V0UmVzdWx0LmJpbmQodGhpcyksIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb29rdXBEYXRhc2V0Q29kZSgpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBpdGVtID0gZGF0YXNldENvZGVzLmZpbmQoZGF0YXNldCA9PiBkYXRhc2V0LmlzbzNDb2RlID09PSB0aGlzLmN1cnJlbnRDb3VudHJ5Q29kZSAmJiBkYXRhc2V0LnNlYXJjaFR5cGUuaW5jbHVkZXModGhpcy5zZWFyY2hUeXBlKSk7XHJcbiAgICBpZiAoaXRlbSkge1xyXG4gICAgICByZXR1cm4gaXRlbS5kYXRhc2V0Q29kZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlUHJvbXB0c2V0UmVzdWx0KHJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICAvLyBSZW1vdmUgYW55IGN1cnJlbnRseSBkaXNwbGF5ZWQgcGlja2xpc3Qgd2hlbiB0aGUgcHJvbXB0c2V0IGNoYW5nZXNcclxuICAgIHRoaXMucGlja2xpc3QuaGlkZSgpO1xyXG5cclxuICAgIC8vIFRyaWdnZXIgYSBuZXcgZXZlbnQgdG8gbm90aWZ5IHN1YnNjcmliZXJzXHJcbiAgICB0aGlzLmV2ZW50cy50cmlnZ2VyKCdwb3N0LXByb21wdHNldC1jaGVjaycsIHJlc3BvbnNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRJbnB1dHMoaW5wdXRzID0gdGhpcy5vcHRpb25zLmVsZW1lbnRzLmlucHV0cyk6IHZvaWQge1xyXG4gICAgLy8gSWYgYWRkcmVzcyBpbnB1dHMgZXhpc3QgdGhlbiByZWdpc3RlciB0aGVzZSB3aXRoIGV2ZW50IGxpc3RlbmVycywgb3RoZXJ3aXNlIGNhbGwgdGhlIHByb21wdHNldCBlbmRwb2ludCB0byByZXRyaWV2ZSB0aGVtXHJcbiAgICBpZiAoaW5wdXRzKSB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJJbnB1dHMoaW5wdXRzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE1ha2UgYW4gQVBJIGNhbGwgdG8gZ2V0IHRoZSBwcm9tcHRzZXQgZm9yIHRoaXMgY291bnRyeS9kYXRhc2V0L2VuZ2luZVxyXG4gICAgICB0aGlzLmdldFByb21wdHNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlYXJjaFR5cGUgPT09IEFkZHJlc3NWYWxpZGF0aW9uU2VhcmNoVHlwZS5TSU5HTEVMSU5FIHx8IHRoaXMuc2VhcmNoVHlwZSA9PT0gQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlLlZBTElEQVRFKSB7XHJcbiAgICAgIC8vIEJpbmQgYW4gZXZlbnQgbGlzdGVuZXIgb24gdGhlIGxvb2t1cCBidXR0b25cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbGVtZW50cy5sb29rdXBCdXR0b24pIHtcclxuICAgICAgICB0aGlzLmxvb2t1cEZuID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuZWxlbWVudHMubG9va3VwQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5sb29rdXBGbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVnaXN0ZXJJbnB1dHMoaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10pIHtcclxuICAgIC8vIElmIG5ldyBpbnB1dHMgaGF2ZSBiZWVuIHByb3ZpZGVkLCBlbnN1cmUgd2UgdXBkYXRlIHRoZSBlbGVtZW50cyBhcnJheSB0byBjYXB0dXJlIHRoZW1cclxuICAgIHRoaXMuaW5wdXRzID0gQXJyYXkuZnJvbShpbnB1dHMpO1xyXG5cclxuICAgIHRoaXMuaW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xyXG4gICAgICAvLyBEaXNhYmxlIGF1dG9jb21wbGV0ZSBvbiB0aGUgZm9ybSBmaWVsZFxyXG4gICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2F1dG9jb21wbGV0ZScsICduZXctcGFzc3dvcmQnKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaFR5cGUgPT09IEFkZHJlc3NWYWxpZGF0aW9uU2VhcmNoVHlwZS5BVVRPQ09NUExFVEUpIHtcclxuICAgICAgICAvLyBCaW5kIGFuIGV2ZW50IGxpc3RlbmVyIG9uIHRoZSBpbnB1dFxyXG4gICAgICAgIHRoaXMua2V5VXBGbiA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XHJcbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmtleVVwRm4pO1xyXG4gICAgICAgIHRoaXMuY2hlY2tUYWJGbiA9IHRoaXMuY2hlY2tUYWIuYmluZCh0aGlzKTtcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5jaGVja1RhYkZuKTtcclxuICAgICAgICAvLyBTZXQgYSBwbGFjZWhvbGRlciBmb3IgdGhlIGlucHV0XHJcbiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsIHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlclRleHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBCaW5kIGFuIGV2ZW50IGxpc3RlbmVyIG9uIHRoZSBpbnB1dCB0byBhbGxvdyB1c2VycyB0byB0cmF2ZXJzZSB1cCBhbmQgZG93biB0aGUgcGlja2xpc3QgdXNpbmcgdGhlIGtleWJvYXJkXHJcbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5oYW5kbGVLZXlib2FyZEV2ZW50LmJpbmQodGhpcykpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb3VudHJ5Q29kZU1hcHBpbmcgPSB0aGlzLm9wdGlvbnMuY291bnRyeUNvZGVNYXBwaW5nIHx8IHt9O1xyXG5cclxuICAgIC8vIEFwcGx5IGZvY3VzIHRvIHRoZSBmaXJzdCBpbnB1dFxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcHBseUZvY3VzKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRzWzBdLmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvdW50cnlMaXN0KCk6IHZvaWQge1xyXG4gICAgLy8gU2V0IHRoZSBpbml0aWFsIGNvdW50cnkgY29kZSBmcm9tIGVpdGhlciB0aGUgdmFsdWUgb2YgYSBjb3VudHJ5IGxpc3QgSFRNTCBlbGVtZW50IG9yIGEgc3RhdGljIGNvdW50cnkgY29kZVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbGVtZW50cy5jb3VudHJ5TGlzdCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRDb3VudHJ5Q29kZSA9IHRoaXMub3B0aW9ucy5lbGVtZW50cy5jb3VudHJ5TGlzdC52YWx1ZTtcclxuXHJcbiAgICAgIC8vIExpc3RlbiBmb3Igd2hlbiBhIGNvdW50cnkgaXMgY2hhbmdlZCBhbmQgY2FsbCB0aGUgcHJvbXB0c2V0IGVuZHBvaW50XHJcbiAgICAgIHRoaXMub3B0aW9ucy5lbGVtZW50cy5jb3VudHJ5TGlzdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmhhbmRsZUNvdW50cnlMaXN0Q2hhbmdlLmJpbmQodGhpcykpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY291bnRyeUNvZGUpIHtcclxuICAgICAgdGhpcy5jdXJyZW50Q291bnRyeUNvZGUgPSB0aGlzLm9wdGlvbnMuY291bnRyeUNvZGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGEgY291bnRyeSBjb2RlIG9yIGEgY291bnRyeSBsaXN0IGVsZW1lbnQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFdoZW4gYSBjb3VudHJ5IGZyb20gdGhlIGxpc3QgaXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBjdXJyZW50IGNvdW50cnkgY29kZSwgY2FsbCB0aGUgcHJvbXB0c2V0IGVuZHBvaW50IGFnYWluIGFuZCByZXNldCB0byB0aGUgZGVmYXVsdCBzZWFyY2ggbW9kZVxyXG4gIHByaXZhdGUgaGFuZGxlQ291bnRyeUxpc3RDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRDb3VudHJ5Q29kZSA9IHRoaXMub3B0aW9ucy5lbGVtZW50cy5jb3VudHJ5TGlzdC52YWx1ZTtcclxuICAgIHRoaXMuZ2V0UHJvbXB0c2V0KCk7XHJcbiAgICB0aGlzLmF2TW9kZSA9IEFkZHJlc3NWYWxpZGF0aW9uTW9kZS5TRUFSQ0g7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlU2VhcmNoRGF0YUZvckFwaUNhbGwoKTogc3RyaW5nIHtcclxuICAgIC8vIElmIGEgZGF0YXNldCBjb2RlIGhhc24ndCBiZWVuIHNldCB5ZXQsIHRyeSBhbmQgbG9vayBpdCB1cFxyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnREYXRhU2V0KSB7XHJcbiAgICAgIHRoaXMuY3VycmVudERhdGFTZXQgPSB0aGlzLmxvb2t1cERhdGFzZXRDb2RlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgY291bnRyeV9pc286IHRoaXMuY3VycmVudENvdW50cnlDb2RlLFxyXG4gICAgICBjb21wb25lbnRzOiB7IHVuc3BlY2lmaWVkOiBbdGhpcy5jdXJyZW50U2VhcmNoVGVybV0gfSxcclxuICAgICAgZGF0YXNldHM6IEFycmF5LmlzQXJyYXkodGhpcy5jdXJyZW50RGF0YVNldCkgPyB0aGlzLmN1cnJlbnREYXRhU2V0IDogW3RoaXMuY3VycmVudERhdGFTZXRdLFxyXG4gICAgICBtYXhfc3VnZ2VzdGlvbnM6ICh0aGlzLm9wdGlvbnMubWF4U3VnZ2VzdGlvbnMgfHwgdGhpcy5waWNrbGlzdC5tYXhTdWdnZXN0aW9ucylcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoVHlwZSA9PT0gQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlLlNJTkdMRUxJTkUgfHwgdGhpcy5zZWFyY2hUeXBlID09PSBBZGRyZXNzVmFsaWRhdGlvblNlYXJjaFR5cGUuVkFMSURBVEUpIHtcclxuICAgICAgZGF0YVsnb3B0aW9ucyddID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdmbGF0dGVuJyxcclxuICAgICAgICAgIFZhbHVlOiAndHJ1ZSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdpbnRlbnNpdHknLFxyXG4gICAgICAgICAgVmFsdWU6ICdjbG9zZSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdwcm9tcHRfc2V0JyxcclxuICAgICAgICAgIFZhbHVlOiAnZGVmYXVsdCdcclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWFyY2hUeXBlID09PSBBZGRyZXNzVmFsaWRhdGlvblNlYXJjaFR5cGUuU0lOR0xFTElORSkge1xyXG4gICAgICAgIGRhdGFbJ29wdGlvbnMnXS5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6ICdzZWFyY2hfdHlwZScsXHJcbiAgICAgICAgICBWYWx1ZTogJ3NpbmdsZWxpbmUnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaFR5cGUgPT09IEFkZHJlc3NWYWxpZGF0aW9uU2VhcmNoVHlwZS5WQUxJREFURSkge1xyXG4gICAgICAgIGRhdGFbJ2xheW91dHMnXSA9IFsnZGVmYXVsdCddO1xyXG4gICAgICAgIGRhdGFbJ2xheW91dF9mb3JtYXQnXSA9ICdkZWZhdWx0JztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb24pIHtcclxuICAgICAgZGF0YVsnbG9jYXRpb24nXSA9IHRoaXMub3B0aW9ucy5sb2NhdGlvbjtcclxuICAgIH1cclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUxvb2t1cERhdGFGb3JBcGlDYWxsKGlucHV0OiBzdHJpbmcsIGxvb2t1cEtleXdvcmQ6IEFkZHJlc3NWYWxpZGF0aW9uTG9va3VwS2V5d29yZHMpOiBzdHJpbmcge1xyXG4gICAgLy8gSWYgYSBkYXRhc2V0IGNvZGUgaGFzbid0IGJlZW4gc2V0IHlldCwgdHJ5IGFuZCBsb29rIGl0IHVwXHJcbiAgICBpZiAoIXRoaXMuY3VycmVudERhdGFTZXQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50RGF0YVNldCA9IHRoaXMubG9va3VwRGF0YXNldENvZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICBjb3VudHJ5X2lzbzogdGhpcy5jdXJyZW50Q291bnRyeUNvZGUsXHJcbiAgICAgIGRhdGFzZXRzOiBBcnJheS5pc0FycmF5KHRoaXMuY3VycmVudERhdGFTZXQpID8gdGhpcy5jdXJyZW50RGF0YVNldCA6IFt0aGlzLmN1cnJlbnREYXRhU2V0XSxcclxuICAgICAgbWF4X3N1Z2dlc3Rpb25zOiAodGhpcy5vcHRpb25zLm1heFN1Z2dlc3Rpb25zIHx8IHRoaXMucGlja2xpc3QubWF4U3VnZ2VzdGlvbnMpLFxyXG4gICAgICBrZXk6IHtcclxuICAgICAgICB0eXBlOiBsb29rdXBLZXl3b3JkLFxyXG4gICAgICAgIHZhbHVlOiBpbnB1dCxcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdoYXQzV29yZHNMb29rdXBWYWx1ZShpbnB1dDogc3RyaW5nLCBzaG91bGRHZXRTdWdnZXN0aW9uczogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnLy8vJykgJiYgc2hvdWxkR2V0U3VnZ2VzdGlvbnMpIHtcclxuICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW5wdXQ7XHJcbiAgfVxyXG5cclxuICAvLyBBbGxvdyB0aGUga2V5Ym9hcmQgdG8gYmUgdXNlZCB0byBlaXRoZXIgdHJhdmVyc2UgdXAgYW5kIGRvd24gdGhlIHBpY2tsaXN0IGFuZCBzZWxlY3QgYW4gaXRlbSwgb3IgdHJpZ2dlciBhIG5ldyBzZWFyY2hcclxuICBwcml2YXRlIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgLy8gSGFuZGxlIGtleWJvYXJkIG5hdmlnYXRpb25cclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KGV2ZW50KTtcclxuXHJcbiAgICAvLyBJZiBhIHBpY2tsaXN0IGlzIHBvcHVsYXRlZCB0aGVuIHRyaWdnZXIgaXRzIGtleXVwIGV2ZW50IHRvIHNlbGVjdCBhbiBpdGVtXHJcbiAgICBpZiAodGhpcy5waWNrbGlzdC5zaXplKSB7XHJcbiAgICAgIGlmIChrZXkgPT09ICdBcnJvd1VwJyB8fCBrZXkgPT09ICdBcnJvd0Rvd24nIHx8IGtleSA9PT0gJ0VudGVyJykge1xyXG4gICAgICAgIHRoaXMucGlja2xpc3Qua2V5dXAoZXZlbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gT3RoZXJ3aXNlLCBlbmFibGUgcHJlc3NpbmcgJ2VudGVyJyB0byB0cmlnZ2VyIGEgbmV3IHNlYXJjaFxyXG4gICAgICBpZiAoa2V5ID09PSAnRW50ZXInKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2goZXZlbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTWFpbiBmdW5jdGlvbiB0byBzZWFyY2ggZm9yIGFuIGFkZHJlc3MgZnJvbSBhbiBpbnB1dCBzdHJpbmdcclxuICBwcml2YXRlIHNlYXJjaChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAvLyBHcmFiIHRoZSBjb3VudHJ5IElTTyBjb2RlIGFuZCAoaWYgaXQgaXMgcHJlc2VudCkgdGhlIGRhdGFzZXQgbmFtZSBmcm9tIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb3VudHJ5TGlzdCAoZm9ybWF0OiB7Y291bnRyeUlzb0NvZGV9O3tkYXRhc2V0fSlcclxuICAgIGNvbnN0IGN1cnJlbnRDb3VudHJ5SW5mbyA9IHRoaXMuY291bnRyeUNvZGVNYXBwaW5nW3RoaXMuY3VycmVudENvdW50cnlDb2RlXSB8fCB0aGlzLmN1cnJlbnRDb3VudHJ5Q29kZTtcclxuICAgIGNvbnN0IGNvdW50cnlDb2RlQW5kRGF0YXNldCA9IGN1cnJlbnRDb3VudHJ5SW5mby5zcGxpdCgnOycpO1xyXG5cclxuICAgIHRoaXMuY3VycmVudENvdW50cnlDb2RlID0gY291bnRyeUNvZGVBbmREYXRhc2V0WzBdO1xyXG4gICAgaWYgKGNvdW50cnlDb2RlQW5kRGF0YXNldFsxXSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnREYXRhU2V0ID0gY291bnRyeUNvZGVBbmREYXRhc2V0WzFdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIChSZS0pc2V0IHRoZSBwcm9wZXJ0eSBzdGF0aW5nIHdoZXRoZXIgdGhlIHNlYXJjaCBpbnB1dCBoYXMgYmVlbiByZXNldC5cclxuICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBpbnN0YW5jZXMgd2hlbiB0aGUgc2VhcmNoIGlucHV0IGlzIGFsc28gYW4gYWRkcmVzc1xyXG4gICAgLy8gb3V0cHV0IGZpZWxkLiBBZnRlciBhbiBhZGRyZXNzIGhhcyBiZWVuIHJldHVybmVkLCB5b3UgZG9uJ3Qgd2FudCBhIG5ldyBcclxuICAgIC8vIHNlYXJjaCBiZWluZyB0cmlnZ2VyZWQgdW50aWwgdGhlIGZpZWxkIGhhcyBiZWVuIGNsZWFyZWQuXHJcbiAgICBpZiAodGhpcy5jdXJyZW50U2VhcmNoVGVybSA9PT0gJycpIHtcclxuICAgICAgdGhpcy5oYXNTZWFyY2hJbnB1dEJlZW5SZXNldCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgaW5wdXQgY29tcG9uZW50cyBkZXBlbmRpbmcgb24gc2VhcmNoIHR5cGUgYW5kIGRhdGFzZXQgdG8gbWF4aW1pemUgbWF0Y2ggcmVzdWx0c1xyXG4gICAgY29uc3QgZGVsaW1pdGVyID0gdGhpcy5pc0ludGVybmF0aW9uYWxWYWxpZGF0aW9uKCkgPyBcInxcIjogXCIsXCI7XHJcbiAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID0gdGhpcy5pbnB1dHMubWFwKGlucHV0ID0+IGlucHV0LnZhbHVlKS5qb2luKGRlbGltaXRlcik7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgc2VhcmNoaW5nIGlzIHBlcm1pdHRlZFxyXG4gICAgaWYgKHRoaXMuY2FuU2VhcmNoKCkpIHtcclxuICAgICAgLy8gQWJvcnQgYW55IG91dHN0YW5kaW5nIHJlcXVlc3RzXHJcbiAgICAgIGlmICh0aGlzLnJlcXVlc3QuY3VycmVudFJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLnJlcXVlc3QuY3VycmVudFJlcXVlc3QuYWJvcnQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVnZXggdGhhdCBjaGVja3MgaWYgdGhlIGlucHV0IGlzIHRoZSBmb3JtYXQgZm9yIGEgd2hhdDN3b3JkcyBzZWFyY2guIEV4OiAvLy9hLmIuY1xyXG4gICAgICBsZXQgcmVnZXggPSAvXlxcL3swLH0oPzpbXjAtOWB+IUAjJCVeJiooKStcXC1fPVt7XFxdfVxcXFx8JzwsLj4/L1wiOzrCo8KnwrrCqcKuXFxzXStbLu+9oeOAgu+9peODu++4kuGflNaJ4YGL25ThjaLgpaRdW14wLTlgfiFAIyQlXiYqKCkrXFwtXz1be1xcXX1cXFxcfCc8LC4+Py9cIjs6wqPCp8K6wqnCrlxcc10rWy7vvaHjgILvvaXjg7vvuJLhn5TWieGBi9uU4Y2i4KWkXVteMC05YH4hQCMkJV4mKigpK1xcLV89W3tcXF19XFxcXHwnPCwuPj8vXCI7OsKjwqfCusKpwq5cXHNdK3xbXjAtOWB+IUAjJCVeJiooKStcXC1fPVt7XFxdfVxcXFx8JzwsLj4/L1wiOzrCo8KnwrrCqcKuXFxzXSsoW1xcdTAwMjBcXHUwMEEwXVteMC05YH4hQCMkJV4mKigpK1xcLV89W3tcXF19XFxcXHwnPCwuPj8vXCI7OsKjwqfCusKpwq5cXHNdKyl7MSwzfVsu772h44CC772l44O777iS4Z+U1onhgYvblOGNouClpF1bXjAtOWB+IUAjJCVeJiooKStcXC1fPVt7XFxdfVxcXFx8JzwsLj4/L1wiOzrCo8KnwrrCqcKuXFxzXSsoW1xcdTAwMjBcXHUwMEEwXVteMC05YH4hQCMkJV4mKigpK1xcLV89W3tcXF19XFxcXHwnPCwuPj8vXCI7OsKjwqfCusKpwq5cXHNdKyl7MSwzfVsu772h44CC772l44O777iS4Z+U1onhgYvblOGNouClpF1bXjAtOWB+IUAjJCVeJiooKStcXC1fPVt7XFxdfVxcXFx8JzwsLj4/L1wiOzrCo8KnwrrCqcKuXFxzXSsoW1xcdTAwMjBcXHUwMEEwXVteMC05YH4hQCMkJV4mKigpK1xcLV89W3tcXF19XFxcXHwnPCwuPj8vXCI7OsKjwqfCusKpwq5cXHNdKyl7MSwzfSkkLztcclxuXHJcbiAgICAgIGlmIChyZWdleC50ZXN0KHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpKSkge1xyXG4gICAgICAgIHRoaXMuYXZNb2RlID0gQWRkcmVzc1ZhbGlkYXRpb25Nb2RlLldIQVQzV09SRFM7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGVybSA9IHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBpcyBVUFJOIG9yIFVEUFJOXHJcbiAgICAgIHJlZ2V4ID0gL15cXGR7MTJ9fFxcZHs4fSQvO1xyXG4gICAgICBpZiAocmVnZXgudGVzdCh0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKSkpIHtcclxuICAgICAgICB0aGlzLmF2TW9kZSA9IEFkZHJlc3NWYWxpZGF0aW9uTW9kZS5VRFBSTjtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID0gdGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEZpcmUgYW4gZXZlbnQgYmVmb3JlIGEgc2VhcmNoIHRha2VzIHBsYWNlXHJcbiAgICAgIHRoaXMuZXZlbnRzLnRyaWdnZXIoJ3ByZS1zZWFyY2gnLCB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtKTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSBsYXN0IHNlYXJjaCB0ZXJtXHJcbiAgICAgIHRoaXMubGFzdFNlYXJjaFRlcm0gPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtO1xyXG5cclxuICAgICAgLy8gSGlkZSBhbmQgc2hvdyBhbiBpbmxpbmUgc3Bpbm5lciB3aGlsc3Qgc2VhcmNoaW5nLiBIaWRlIGl0IGZpcnN0IHNvIHdlIGRvbid0IHNob3cgMiBzcGlubmVycyBieSBhY2NpZGVudC5cclxuICAgICAgdGhpcy5zZWFyY2hTcGlubmVyLmhpZGUoKTtcclxuICAgICAgdGhpcy5zZWFyY2hTcGlubmVyLnNob3coKTtcclxuICAgICAgbGV0IHVybCwgaGVhZGVycywgY2FsbGJhY2ssIGRhdGE7XHJcblxyXG4gICAgICAvLyBDb25zdHJ1Y3QgdGhlIG5ldyBTZWFyY2ggVVJMIGFuZCBkYXRhXHJcbiAgICAgIHN3aXRjaCh0aGlzLmF2TW9kZSkgeyBcclxuICAgICAgICBjYXNlIEFkZHJlc3NWYWxpZGF0aW9uTW9kZS5XSEFUM1dPUkRTOiB7XHJcbiAgICAgICAgICBkYXRhID0gdGhpcy5nZW5lcmF0ZUxvb2t1cERhdGFGb3JBcGlDYWxsKHRoaXMuZ2V0V2hhdDNXb3Jkc0xvb2t1cFZhbHVlKHRoaXMuY3VycmVudFNlYXJjaFRlcm0sIHRydWUpLCBBZGRyZXNzVmFsaWRhdGlvbkxvb2t1cEtleXdvcmRzLldIQVQzV09SRFMpO1xyXG4gICAgICAgICAgdXJsID0gdGhpcy5iYXNlVXJsICsgdGhpcy5sb29rdXBFbmRwb2ludDtcclxuICAgICAgICAgIGhlYWRlcnMgPSBbXTtcclxuICAgICAgICAgIGNhbGxiYWNrID0gdGhpcy5waWNrbGlzdC5zaG93V2hhdDNXb3JkcztcclxuICAgICAgICAgIGJyZWFrOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBBZGRyZXNzVmFsaWRhdGlvbk1vZGUuVURQUk46IHsgXHJcbiAgICAgICAgICBkYXRhID0gdGhpcy5nZW5lcmF0ZUxvb2t1cERhdGFGb3JBcGlDYWxsKHRoaXMuY3VycmVudFNlYXJjaFRlcm0sIEFkZHJlc3NWYWxpZGF0aW9uTG9va3VwS2V5d29yZHMuVURQUk4pO1xyXG4gICAgICAgICAgdXJsID0gdGhpcy5iYXNlVXJsICsgdGhpcy5sb29rdXBFbmRwb2ludDtcclxuICAgICAgICAgIGhlYWRlcnMgPSBbeyBrZXk6ICdBZGQtQWRkcmVzc2VzJywgdmFsdWU6IHRydWUgfV07XHJcbiAgICAgICAgICBjYWxsYmFjayA9IHRoaXMucGlja2xpc3Quc2hvd0xvb2t1cDtcclxuICAgICAgICAgIGJyZWFrOyBcclxuICAgICAgICB9IFxyXG4gICAgICAgIGRlZmF1bHQ6IHsgXHJcbiAgICAgICAgICBkYXRhID0gdGhpcy5nZW5lcmF0ZVNlYXJjaERhdGFGb3JBcGlDYWxsKCk7XHJcbiAgICAgICAgICB1cmwgPSB0aGlzLmJhc2VVcmwgKyAodGhpcy5zZWFyY2hUeXBlID09PSBBZGRyZXNzVmFsaWRhdGlvblNlYXJjaFR5cGUuVkFMSURBVEUgPyB0aGlzLnZhbGlkYXRlRW5kcG9pbnQgOiB0aGlzLnNlYXJjaEVuZHBvaW50KTtcclxuICAgICAgICAgIGhlYWRlcnMgPSB0aGlzLnNlYXJjaFR5cGUgPT09IEFkZHJlc3NWYWxpZGF0aW9uU2VhcmNoVHlwZS5WQUxJREFURSA/IFt7IGtleTogJ0FkZC1NZXRhZGF0YScsIHZhbHVlOiB0cnVlIH1dIDogW107XHJcbiAgICAgICAgICBjYWxsYmFjayA9IHRoaXMuc2VhcmNoVHlwZSA9PT0gQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlLlZBTElEQVRFID8gdGhpcy5yZXN1bHQuaGFuZGxlVmFsaWRhdGVSZXNwb25zZSA6IHRoaXMucGlja2xpc3Quc2hvdztcclxuICAgICAgICAgIGJyZWFrOyBcclxuICAgICAgICB9IFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gSW5pdGlhdGUgbmV3IFNlYXJjaCByZXF1ZXN0XHJcbiAgICAgIHRoaXMucmVxdWVzdC5zZW5kKHVybCwgJ1BPU1QnLCBjYWxsYmFjaywgZGF0YSwgaGVhZGVycyk7XHJcblxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmxhc3RTZWFyY2hUZXJtICE9PSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtKSB7XHJcbiAgICAgIC8vIENsZWFyIHRoZSBwaWNrbGlzdCBpZiB0aGUgc2VhcmNoIHRlcm0gaXMgY2xlYXJlZC9lbXB0eVxyXG4gICAgICB0aGlzLnBpY2tsaXN0LmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gcmV0dXJuIGEgY29uc2lzdGVudCBrZXkgbmFtZVxyXG4gIHByaXZhdGUgZ2V0S2V5KHsga2V5IH0pOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSAnRG93bic6XHJcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XHJcbiAgICAgICAgcmV0dXJuICdBcnJvd0Rvd24nO1xyXG4gICAgICBjYXNlICdVcCc6XHJcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxyXG4gICAgICAgIHJldHVybiAnQXJyb3dVcCc7XHJcbiAgICAgIGNhc2UgJ1NwYWNlYmFyJzpcclxuICAgICAgY2FzZSAnICc6XHJcbiAgICAgICAgcmV0dXJuICcgJztcclxuICAgICAgY2FzZSAnRXNjYXBlJzpcclxuICAgICAgY2FzZSAnRXNjJzpcclxuICAgICAgICByZXR1cm4gJ0VzY2FwZSc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGtleTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FuU2VhcmNoKCk6IGJvb2xlYW4ge1xyXG4gICAgLy8gSWYgc2VhcmNoaW5nIG9uIHRoaXMgaW5zdGFuY2UgaXMgZW5hYmxlZCwgYW5kXHJcbiAgICByZXR1cm4gKHRoaXMub3B0aW9ucy5lbmFibGVkICYmXHJcbiAgICAgIC8vIElmIHNlYXJjaCB0ZXJtIGlzIG5vdCBlbXB0eSwgYW5kXHJcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gIT09ICcnICYmXHJcbiAgICAgIC8vIElmIHRoZSBzZWFyY2ggdGVybSBpcyBhdCBsZWFzdCA0IGNoYXJhY3RlcnNcclxuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGVybS5sZW5ndGggPiAzICYmXHJcbiAgICAgIC8vIElmIHNlYXJjaCB0ZXJtIGlzIG5vdCB0aGUgc2FtZSBhcyBwcmV2aW91cyBzZWFyY2ggdGVybSwgYW5kXHJcbiAgICAgIHRoaXMubGFzdFNlYXJjaFRlcm0gIT09IHRoaXMuY3VycmVudFNlYXJjaFRlcm0gJiZcclxuICAgICAgLy8gSWYgdGhlIGNvdW50cnkgaXMgbm90IGVtcHR5LCBhbmRcclxuICAgICAgdGhpcy5jdXJyZW50Q291bnRyeUNvZGUgJiZcclxuICAgICAgLy8gSWYgc2VhcmNoIGlucHV0IGhhcyBiZWVuIHJlc2V0IChpZiBhcHBsaWNhYmxlKVxyXG4gICAgICB0aGlzLmhhc1NlYXJjaElucHV0QmVlblJlc2V0ID09PSB0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG93ZXJlZEJ5TG9nbzogUG93ZXJlZEJ5TG9nbyA9IHtcclxuICAgIGVsZW1lbnQ6IG51bGwsXHJcbiAgICAvLyBDcmVhdGUgYSBcIlBvd2VyZWQgYnkgRXhwZXJpYW5cIiBmb290ZXJcclxuICAgIGNyZWF0ZShwaWNrbGlzdCkge1xyXG4gICAgICBjb25zdCBpdGVtID0ge1xyXG4gICAgICAgIHRleHQ6IGAke3RoaXMuc3ZnfSA8ZW0+UG93ZXJlZCBieSBFeHBlcmlhbjwvZW0+YCxcclxuICAgICAgICBmb3JtYXQ6ICcnXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGxpc3RJdGVtID0gcGlja2xpc3QuY3JlYXRlTGlzdEl0ZW0oaXRlbSk7XHJcbiAgICAgIGxpc3RJdGVtLmNsYXNzTGlzdC5hZGQoJ3Bvd2VyZWQtYnktZXhwZXJpYW4nKTtcclxuICAgICAgcGlja2xpc3QubGlzdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGxpc3RJdGVtKTtcclxuICAgICAgcmV0dXJuIGxpc3RJdGVtO1xyXG4gICAgfSxcclxuICAgIC8vIERlc3Ryb3kgdGhlIFwiUG93ZXJlZCBieSBFeHBlcmlhblwiIGZvb3RlclxyXG4gICAgZGVzdHJveShwaWNrbGlzdCkge1xyXG4gICAgICBpZiAodGhpcy5lbGVtZW50KSB7XHJcbiAgICAgICAgcGlja2xpc3QubGlzdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc3ZnOiBgPHN2ZyBjbGFzcz1cImV4cGVyaWFuLWxvZ29cIiB2ZXJzaW9uPVwiMS4xXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHg9XCIwcHhcIiB5PVwiMHB4XCIgdmlld0JveD1cIjAgMCAxMjAgMTIwXCIgc3R5bGU9XCJcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiIHJvbGU9XCJpbWdcIiBhcmlhLWxhYmVsPVwiUG93ZXJlZCBieSBFeHBlcmlhblwiPlxyXG4gICAgICAgICAgICA8dGl0bGU+RXhwZXJpYW4gbG9nbzwvdGl0bGU+XHJcbiAgICAgICAgICAgIDxnPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggc3R5bGU9XCJmaWxsOiAjMEU2RUI2XCIgZD1cIk01Ni4xLDI3aC0xM2MtMy45LDAtNy0zLjEtNy03VjdjMC0zLjksMy4xLTcsNy03aDEzYzMuOSwwLDcsMy4xLDcsN3YxM0M2My4xLDIzLjgsNjAsMjcsNTYuMSwyN1wiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0eWxlPVwiZmlsbDogIzcyMjE3QlwiIGQ9XCJNMjIuNSw1Ni4xSDcuOWMtNC4zLDAtNy45LTMuNS03LjktNy45VjMzLjZjMC00LjMsMy41LTcuOSw3LjktNy45aDE0LjZjNC4zLDAsNy45LDMuNSw3LjksNy45djE0LjZDMzAuNCw1Mi42LDI2LjgsNTYuMSwyMi41LDU2LjFcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBzdHlsZT1cImZpbGw6ICNCMTIzODRcIiBkPVwiTTIxLjEsODYuNGgtOC45Yy0yLjcsMC00LjgtMi4xLTQuOC00Ljh2LTguOWMwLTIuNywyLjItNC44LDQuOC00LjhoOC45YzIuNywwLDQuOCwyLjIsNC44LDQuOHY4LjlDMjUuOSw4NC4zLDIzLjcsODYuNCwyMS4xLDg2LjRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBzdHlsZT1cImZpbGw6ICNFNzI4ODdcIiBkPVwiTTQ1LjEsMTE0LjdIMzQuNWMtMy4xLDAtNS43LTIuNS01LjctNS43Vjk4LjRjMC0zLjEsMi41LTUuNyw1LjctNS43aDEwLjZjMy4xLDAsNS43LDIuNSw1LjcsNS43VjEwOUM1MC43LDExMi4xLDQ4LjIsMTE0LjcsNDUuMSwxMTQuN1wiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0eWxlPVwiZmlsbDogI0U3Mjg4N1wiIGQ9XCJNODMuOCwzMi4zaC03LjNjLTIuMiwwLTMuOS0xLjgtMy45LTMuOXYtNy4zYzAtMi4yLDEuOC0zLjksMy45LTMuOWg3LjNjMi4yLDAsMy45LDEuOCwzLjksMy45djcuM0M4Ny43LDMwLjUsODUuOSwzMi4zLDgzLjgsMzIuM1wiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0eWxlPVwiZmlsbDogIzAwNDY5MVwiIGQ9XCJNODEuNyw2MS44QzgxLjUsNTEuMSw3Miw0Miw2MC43LDQyQzQ5LDQyLDM5LjYsNTEuMywzOS42LDYyLjlDMzkuNiw3NC42LDQ5LDg0LDYwLjcsODRjNS42LDAsMTAuOC0yLjIsMTQuNi01LjljMC43LTAuNywxLjItMS42LDEuMi0yLjZjMC0xLjktMS42LTMuNS0zLjUtMy41Yy0xLjEsMC0yLDAuNy0yLjgsMS40Yy0yLjQsMi41LTUuOSwzLjctOS41LDMuN2MtNywwLTEyLjctNC44LTEzLjktMTEuNWgzMS41YzAsMCwwLDAsMC4xLDBoMC4xYzAuMSwwLDAuMSwwLDAuMiwwYzAuMSwwLDAuMiwwLDAuNC0wLjFDODAuNCw2NSw4MS43LDYzLjYsODEuNyw2MS44eiBNNjAuNyw0OC45YzYuMywwLDExLjYsNC4xLDEzLjQsOS43SDQ3LjNDNDkuMSw1Myw1NC4zLDQ4LjksNjAuNyw0OC45elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgIDwvc3ZnPmBcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGNyZWF0ZVBpY2tsaXN0KCkge1xyXG4gICAgLy8gSW5zdGFudGlhdGUgYSBuZXcgUGlja2xpc3QgY2xhc3MgYW5kIHNldCB0aGUgcHJvcGVydGllcyBiZWxvd1xyXG4gICAgdGhpcy5waWNrbGlzdCA9IG5ldyBQaWNrbGlzdCgpO1xyXG5cclxuICAgIC8vIFNldCBpbml0aWFsIG1heCBzaXplXHJcbiAgICB0aGlzLnBpY2tsaXN0Lm1heFN1Z2dlc3Rpb25zID0gMjU7XHJcbiAgICAvLyBUYWIgY291bnQgdXNlZCBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvblxyXG4gICAgdGhpcy5waWNrbGlzdC50YWJDb3VudCA9IC0xO1xyXG4gICAgLy8gUmVuZGVyIGEgcGlja2xpc3Qgb2Ygc2VhcmNoIHJlc3VsdHNcclxuXHJcbiAgICB0aGlzLnBpY2tsaXN0LnNob3cgPSAoaXRlbXM6IFNlYXJjaFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIC8vIFN0b3JlIHRoZSBwaWNrbGlzdCBpdGVtc1xyXG4gICAgICB0aGlzLnBpY2tsaXN0Lml0ZW1zID0gaXRlbXM/LnJlc3VsdC5zdWdnZXN0aW9ucztcclxuXHJcbiAgICAgIHRoaXMucGlja2xpc3QuaGFuZGxlQ29tbW9uU2hvd1BpY2tsaXN0TG9naWMoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnBpY2tsaXN0Lml0ZW1zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gSWYgYSBwaWNrbGlzdCBuZWVkcyBcInJlZmluaW5nXCIgdGhlbiBwcmVwZW5kIGEgdGV4dGJveCB0byBhbGxvdyB0aGUgdXNlciB0byBlbnRlciB0aGVpciBzZWxlY3Rpb25cclxuICAgICAgICBpZiAodGhpcy5waWNrbGlzdC5yZWZpbmUuaXNOZWVkZWQoaXRlbXMpKSB7XHJcbiAgICAgICAgICB0aGlzLnBpY2tsaXN0LnJlZmluZS5jcmVhdGVJbnB1dChpdGVtcy5yZXN1bHQuc3VnZ2VzdGlvbnNfcHJvbXB0LCBpdGVtcy5yZXN1bHQuc3VnZ2VzdGlvbnNfa2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFR5cGUgPT09IEFkZHJlc3NWYWxpZGF0aW9uU2VhcmNoVHlwZS5WQUxJREFURSkge1xyXG4gICAgICAgICAgdGhpcy5waWNrbGlzdC5kaXNwbGF5U3VnZ2VzdGlvbnNIZWFkZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbmQgc2hvdyByZXN1bHRzXHJcbiAgICAgICAgdGhpcy5waWNrbGlzdC5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGl0ZW0vcm93IGluIHRoZSBwaWNrbGlzdFxyXG4gICAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSB0aGlzLnBpY2tsaXN0LmNyZWF0ZUxpc3RJdGVtKGl0ZW0pO1xyXG4gICAgICAgICAgdGhpcy5waWNrbGlzdC5saXN0LmFwcGVuZENoaWxkKGxpc3RJdGVtKTtcclxuXHJcbiAgICAgICAgICAvLyBMaXN0ZW4gZm9yIHNlbGVjdGlvbiBvbiB0aGlzIGl0ZW1cclxuICAgICAgICAgIHRoaXMucGlja2xpc3QubGlzdGVuKGxpc3RJdGVtKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVHlwZSA9PT0gQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlLlZBTElEQVRFKSB7XHJcbiAgICAgICAgICB0aGlzLnBpY2tsaXN0LmRpc3BsYXlVc2VBZGRyZXNzRW50ZXJlZEZvb3RlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5waWNrbGlzdC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5waWNrbGlzdC5oYW5kbGVFbXB0eVBpY2tsaXN0KGl0ZW1zKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQWRkIGEgXCJQb3dlcmVkIGJ5IEV4cGVyaWFuXCIgbG9nbyB0byB0aGUgcGlja2xpc3QgZm9vdGVyXHJcbiAgICAgIHRoaXMucG93ZXJlZEJ5TG9nby5lbGVtZW50ID0gdGhpcy5wb3dlcmVkQnlMb2dvLmVsZW1lbnQgfHwgdGhpcy5wb3dlcmVkQnlMb2dvLmNyZWF0ZSh0aGlzLnBpY2tsaXN0KTtcclxuXHJcbiAgICAgIC8vIEZpcmUgYW4gZXZlbnQgYWZ0ZXIgcGlja2xpc3QgaXMgY3JlYXRlZFxyXG4gICAgICB0aGlzLmV2ZW50cy50cmlnZ2VyKCdwb3N0LXBpY2tsaXN0LWNyZWF0ZScsIHRoaXMucGlja2xpc3QuaXRlbXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnBpY2tsaXN0LnNob3dXaGF0M1dvcmRzID0gKGl0ZW1zOiBMb29rdXBXM1dSZXNwb25zZSkgPT4ge1xyXG4gICAgICAvLyBTdG9yZSB0aGUgcGlja2xpc3QgaXRlbXNcclxuICAgICAgdGhpcy5waWNrbGlzdC53aGF0M3dvcmRzSXRlbXMgPSBpdGVtcz8ucmVzdWx0LnN1Z2dlc3Rpb25zO1xyXG5cclxuICAgICAgdGhpcy5waWNrbGlzdC5oYW5kbGVDb21tb25TaG93UGlja2xpc3RMb2dpYygpO1xyXG5cclxuICAgICAgaWYgKHRoaXMucGlja2xpc3Qud2hhdDN3b3Jkc0l0ZW1zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFuZCBzaG93IHJlc3VsdHNcclxuICAgICAgICB0aGlzLnBpY2tsaXN0LndoYXQzd29yZHNJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGl0ZW0vcm93IGluIHRoZSBwaWNrbGlzdFxyXG4gICAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSB0aGlzLnBpY2tsaXN0LmNyZWF0ZVdoYXQzV29yZHNMaXN0SXRlbShpdGVtKTtcclxuICAgICAgICAgIHRoaXMucGlja2xpc3QubGlzdC5hcHBlbmRDaGlsZChsaXN0SXRlbSk7XHJcblxyXG4gICAgICAgICAgLy8gTGlzdGVuIGZvciBzZWxlY3Rpb24gb24gdGhpcyBpdGVtXHJcbiAgICAgICAgICB0aGlzLnBpY2tsaXN0Lmxpc3RlbihsaXN0SXRlbSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucGlja2xpc3Quc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGlja2xpc3QuaGFuZGxlRW1wdHlQaWNrbGlzdChpdGVtcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFkZCBhIFwiUG93ZXJlZCBieSBFeHBlcmlhblwiIGxvZ28gdG8gdGhlIHBpY2tsaXN0IGZvb3RlclxyXG4gICAgICB0aGlzLnBvd2VyZWRCeUxvZ28uZWxlbWVudCA9IHRoaXMucG93ZXJlZEJ5TG9nby5lbGVtZW50IHx8IHRoaXMucG93ZXJlZEJ5TG9nby5jcmVhdGUodGhpcy5waWNrbGlzdCk7XHJcblxyXG4gICAgICAvLyBGaXJlIGFuIGV2ZW50IGFmdGVyIHBpY2tsaXN0IGlzIGNyZWF0ZWRcclxuICAgICAgdGhpcy5ldmVudHMudHJpZ2dlcigncG9zdC1waWNrbGlzdC1jcmVhdGUnLCB0aGlzLnBpY2tsaXN0Lml0ZW1zKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5waWNrbGlzdC5zaG93TG9va3VwID0gKGl0ZW1zOiBMb29rdXBWMlJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIC8vIFN0b3JlIHRoZSBwaWNrbGlzdCBpdGVtc1xyXG4gICAgICB0aGlzLnBpY2tsaXN0Lmxvb2t1cEl0ZW1zID0gaXRlbXM/LnJlc3VsdC5hZGRyZXNzZXM7XHJcblxyXG4gICAgICB0aGlzLnBpY2tsaXN0LmhhbmRsZUNvbW1vblNob3dQaWNrbGlzdExvZ2ljKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5waWNrbGlzdC5sb29rdXBJdGVtcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbmQgc2hvdyByZXN1bHRzXHJcbiAgICAgICAgdGhpcy5waWNrbGlzdC5sb29rdXBJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGl0ZW0vcm93IGluIHRoZSBwaWNrbGlzdFxyXG4gICAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSB0aGlzLnBpY2tsaXN0LmNyZWF0ZUxvb2t1cExpc3RJdGVtKGl0ZW0pO1xyXG4gICAgICAgICAgdGhpcy5waWNrbGlzdC5saXN0LmFwcGVuZENoaWxkKGxpc3RJdGVtKTtcclxuXHJcbiAgICAgICAgICAvLyBMaXN0ZW4gZm9yIHNlbGVjdGlvbiBvbiB0aGlzIGl0ZW1cclxuICAgICAgICAgIHRoaXMucGlja2xpc3QubGlzdGVuKGxpc3RJdGVtKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5waWNrbGlzdC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5waWNrbGlzdC5oYW5kbGVFbXB0eVBpY2tsaXN0KGl0ZW1zKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQWRkIGEgXCJQb3dlcmVkIGJ5IEV4cGVyaWFuXCIgbG9nbyB0byB0aGUgcGlja2xpc3QgZm9vdGVyXHJcbiAgICAgIHRoaXMucG93ZXJlZEJ5TG9nby5lbGVtZW50ID0gdGhpcy5wb3dlcmVkQnlMb2dvLmVsZW1lbnQgfHwgdGhpcy5wb3dlcmVkQnlMb2dvLmNyZWF0ZSh0aGlzLnBpY2tsaXN0KTtcclxuXHJcbiAgICAgIC8vIEZpcmUgYW4gZXZlbnQgYWZ0ZXIgcGlja2xpc3QgaXMgY3JlYXRlZFxyXG4gICAgICB0aGlzLmV2ZW50cy50cmlnZ2VyKCdwb3N0LXBpY2tsaXN0LWNyZWF0ZScsIHRoaXMucGlja2xpc3QuaXRlbXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnBpY2tsaXN0LmhhbmRsZUNvbW1vblNob3dQaWNrbGlzdExvZ2ljID0gKCkgPT4ge1xyXG4gICAgICAvLyBSZXNldCBhbnkgcHJldmlvdXNseSBzZWxlY3RlZCBjdXJyZW50IGl0ZW1cclxuICAgICAgdGhpcy5waWNrbGlzdC5jdXJyZW50SXRlbSA9IG51bGw7XHJcblxyXG4gICAgICAvLyBVcGRhdGUgcGlja2xpc3Qgc2l6ZVxyXG4gICAgICB0aGlzLnBpY2tsaXN0LnNpemUgPSB0aGlzLnBpY2tsaXN0Lml0ZW1zPy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBSZXNldCB0aGUgcGlja2xpc3QgdGFiIGNvdW50ICh1c2VkIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uKVxyXG4gICAgICB0aGlzLnBpY2tsaXN0LnJlc2V0VGFiQ291bnQoKTtcclxuXHJcbiAgICAgIC8vIEhpZGUgdGhlIGlubGluZSBzZWFyY2ggc3Bpbm5lclxyXG4gICAgICB0aGlzLnNlYXJjaFNwaW5uZXIuaGlkZSgpO1xyXG5cclxuICAgICAgLy8gR2V0L0NyZWF0ZSBwaWNrbGlzdCBjb250YWluZXIgZWxlbWVudFxyXG4gICAgICB0aGlzLnBpY2tsaXN0Lmxpc3QgPSB0aGlzLnBpY2tsaXN0Lmxpc3QgfHwgdGhpcy5waWNrbGlzdC5jcmVhdGVMaXN0KCk7XHJcblxyXG4gICAgICAvLyBFbnN1cmUgcHJldmlvdXMgcmVzdWx0cyBhcmUgY2xlYXJlZFxyXG4gICAgICB0aGlzLnBpY2tsaXN0Lmxpc3QuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgIHRoaXMucGlja2xpc3QudXNlQWRkcmVzc0VudGVyZWQuZGVzdHJveSgpO1xyXG5cclxuICAgICAgLy8gRmlyZSBhbiBldmVudCBiZWZvcmUgcGlja2xpc3QgaXMgY3JlYXRlZFxyXG4gICAgICB0aGlzLmV2ZW50cy50cmlnZ2VyKCdwcmUtcGlja2xpc3QtY3JlYXRlJywgdGhpcy5waWNrbGlzdC5pdGVtcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFJlbW92ZSB0aGUgcGlja2xpc3RcclxuICAgIHRoaXMucGlja2xpc3QuaGlkZSA9ICgpID0+IHtcclxuICAgICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgcGlja2xpc3QgaXRlbVxyXG4gICAgICB0aGlzLnBpY2tsaXN0LmN1cnJlbnRJdGVtID0gbnVsbDtcclxuICAgICAgLy8gUmVtb3ZlIHRoZSBcInVzZSBhZGRyZXNzIGVudGVyZWRcIiBvcHRpb24gdG9vXHJcbiAgICAgIHRoaXMucGlja2xpc3QudXNlQWRkcmVzc0VudGVyZWQuZGVzdHJveSgpO1xyXG4gICAgICAvLyBSZW1vdmUgdGhlIFwiUG93ZXJlZCBieSBFeHBlcmlhblwiIGxvZ29cclxuICAgICAgdGhpcy5wb3dlcmVkQnlMb2dvLmRlc3Ryb3kodGhpcy5waWNrbGlzdCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pbnB1dHMpIHtcclxuICAgICAgICAvLyBSZW1vdmUgdGhlIGNsYXNzIGRlbm90aW5nIGEgcGlja2xpc3QgLSBpZiBTaW5nbGVsaW5lIG1vZGUgaXMgdXNlZCwgdGhlbiBpdCBpcyB0aGUgbGFzdCBpbnB1dCBmaWVsZCwgb3RoZXJ3aXNlIHVzZSB0aGUgZmlyc3Qgb25lXHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnNlYXJjaFR5cGUgPT09IEFkZHJlc3NWYWxpZGF0aW9uU2VhcmNoVHlwZS5TSU5HTEVMSU5FID8gdGhpcy5pbnB1dHMubGVuZ3RoIC0gMSA6IDA7XHJcbiAgICAgICAgdGhpcy5pbnB1dHNbcG9zaXRpb25dLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3dpbmctc3VnZ2VzdGlvbnMnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIHRoZSBtYWluIHBpY2tsaXN0IGNvbnRhaW5lclxyXG4gICAgICBpZiAodGhpcy5waWNrbGlzdC5saXN0KSB7XHJcbiAgICAgICAgdGhpcy5waWNrbGlzdC5jb250YWluZXIucmVtb3ZlKCk7XHJcbiAgICAgICAgdGhpcy5waWNrbGlzdC5saXN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucGlja2xpc3QuaGFuZGxlRW1wdHlQaWNrbGlzdCA9IChpdGVtczogU2VhcmNoUmVzcG9uc2UgfCBMb29rdXBXM1dSZXNwb25zZSB8IExvb2t1cFYyUmVzcG9uc2UpID0+IHtcclxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IGl0ZW0vcm93IGluIHRoZSBwaWNrbGlzdCBzaG93aW5nIFwiTm8gbWF0Y2hlc1wiIHRoYXQgYWxsb3dzIHRoZSBcInVzZSBhZGRyZXNzIGVudGVyZWRcIiBvcHRpb25cclxuICAgICAgdGhpcy5waWNrbGlzdC51c2VBZGRyZXNzRW50ZXJlZC5lbGVtZW50ID0gdGhpcy5waWNrbGlzdC51c2VBZGRyZXNzRW50ZXJlZC5lbGVtZW50IHx8IHRoaXMucGlja2xpc3QudXNlQWRkcmVzc0VudGVyZWQuY3JlYXRlKGl0ZW1zLnJlc3VsdD8uY29uZmlkZW5jZSk7XHJcblxyXG4gICAgICB0aGlzLnBpY2tsaXN0LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTtcclxuXHJcbiAgICAgIC8vIFByb3ZpZGUgaW1wbGVtZW50aW5nIHNlYXJjaCB0eXBlcyB3aXRoIGEgbWVhbnMgb2YgaW52b2tpbmcgYSBjdXN0b20gY2FsbGJhY2tcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnBpY2tsaXN0LmhhbmRsZUVtcHR5UGlja2xpc3RDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRoaXMucGlja2xpc3QuaGFuZGxlRW1wdHlQaWNrbGlzdENhbGxiYWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8gUHJlcGVuZCBhIHRpdGxlIGJlZm9yZSB0aGUgc3VnZ2VzdGlvbnNcclxuICAgIHRoaXMucGlja2xpc3QuZGlzcGxheVN1Z2dlc3Rpb25zSGVhZGVyID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCB0aXRsZURpdiA9ICg8SFRNTEVsZW1lbnQ+ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBpY2tsaXN0LXN1Z2dlc3Rpb25zLWhlYWRlcicpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcclxuICAgICAgdGl0bGVEaXYuY2xhc3NMaXN0LmFkZCgncGlja2xpc3Qtc3VnZ2VzdGlvbnMtaGVhZGVyJyk7XHJcbiAgICAgIHRpdGxlRGl2LmlubmVyVGV4dCA9ICdTdWdnZXN0aW9uczonO1xyXG4gICAgICB0aGlzLnBpY2tsaXN0Lmxpc3QucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGl0bGVEaXYsIHRoaXMucGlja2xpc3QubGlzdCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFwcGVuZCBhIGZvb3RlciBhdCB0aGUgYm90dG9tIG9mIHRoZSBwaWNrbGlzdCBwcm92aWRpbmcgYW4gb3B0aW9uIHRvIFwidXNlIGFkZHJlc3MgZW50ZXJlZFwiXHJcbiAgICB0aGlzLnBpY2tsaXN0LmRpc3BsYXlVc2VBZGRyZXNzRW50ZXJlZEZvb3RlciA9ICgpID0+IHtcclxuICAgICAgY29uc3QgY29udGFpbmVyRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBpY2tsaXN0LXVzZS1lbnRlcmVkLWNvbnRhaW5lcicpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb250YWluZXJEaXYuY2xhc3NMaXN0LmFkZCgncGlja2xpc3QtdXNlLWVudGVyZWQtY29udGFpbmVyJyk7XHJcbiAgICAgIHRoaXMucGlja2xpc3QubGlzdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb250YWluZXJEaXYsIHRoaXMucGlja2xpc3QubGlzdC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG5cclxuICAgICAgY29uc3QgdGl0bGVEaXYgPSAoPEhUTUxFbGVtZW50PmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5waWNrbGlzdC11c2UtZW50ZXJlZC1oZWFkZXInKSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XHJcbiAgICAgIHRpdGxlRGl2LmNsYXNzTGlzdC5hZGQoJ3BpY2tsaXN0LXVzZS1lbnRlcmVkLWhlYWRlcicpO1xyXG4gICAgICB0aXRsZURpdi5pbm5lclRleHQgPSAnT3IgdXNlIGFkZHJlc3MgZW50ZXJlZDonO1xyXG4gICAgICBjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQodGl0bGVEaXYpO1xyXG5cclxuICAgICAgY29uc3QgaXRlbURpdiA9ICg8SFRNTEVsZW1lbnQ+ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBpY2tsaXN0LXVzZS1lbnRlcmVkLW9wdGlvbicpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcclxuICAgICAgaXRlbURpdi5jbGFzc0xpc3QuYWRkKCdwaWNrbGlzdC11c2UtZW50ZXJlZC1vcHRpb24nKTtcclxuICAgICAgaXRlbURpdi5pbm5lclRleHQgPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnJlcGxhY2UoLywrL2csICcsICcpO1xyXG4gICAgICBpdGVtRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrbGlzdC51c2VBZGRyZXNzRW50ZXJlZC5jbGljayk7XHJcbiAgICAgIGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZChpdGVtRGl2KTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gSWYgdGhlIHBpY2tsaXN0IGNvbnRhaW5lciBpcyBvdXQgb2YgYm91bmRzIHRvIHRoZSB0b3Agb3IgYm90dG9tLCB0aGVuIHNjcm9sbCBpdCBpbnRvIHZpZXdcclxuICAgIHRoaXMucGlja2xpc3Quc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9ICgpID0+IHtcclxuICAgICAgY29uc3Qgb3V0T2ZCb3VuZHNUb3AgPSB0aGlzLnBpY2tsaXN0LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgPCAwO1xyXG4gICAgICBjb25zdCBvdXRPZkJvdW5kc0JvdHRvbSA9IHRoaXMucGlja2xpc3QuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSA+IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcbiAgICAgIGlmIChvdXRPZkJvdW5kc1RvcCB8fCBvdXRPZkJvdW5kc0JvdHRvbSkge1xyXG4gICAgICAgIHRoaXMucGlja2xpc3QuY29udGFpbmVyLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5waWNrbGlzdC51c2VBZGRyZXNzRW50ZXJlZCA9IHtcclxuICAgICAgZWxlbWVudDogbnVsbCxcclxuICAgICAgLy8gQ3JlYXRlIGEgXCJ1c2UgYWRkcmVzcyBlbnRlcmVkXCIgb3B0aW9uXHJcbiAgICAgIGNyZWF0ZTogKGNvbmZpZGVuY2U6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB7XHJcbiAgICAgICAgICB0ZXh0OiBgJHtjb25maWRlbmNlfSAke3RoaXMub3B0aW9ucy51c2VBZGRyZXNzRW50ZXJlZFRleHR9YFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSB0aGlzLnBpY2tsaXN0LmNyZWF0ZUxpc3RJdGVtKGl0ZW0pO1xyXG4gICAgICAgIGxpc3RJdGVtLmNsYXNzTGlzdC5hZGQoJ3VzZS1hZGRyZXNzLWVudGVyZWQnKTtcclxuICAgICAgICBsaXN0SXRlbS5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgJ0VudGVyIGFkZHJlc3MgbWFudWFsbHknKTtcclxuICAgICAgICB0aGlzLnBpY2tsaXN0Lmxpc3QgPSB0aGlzLnBpY2tsaXN0Lmxpc3QgfHwgdGhpcy5waWNrbGlzdC5jcmVhdGVMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5waWNrbGlzdC5saXN0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGxpc3RJdGVtLCB0aGlzLnBpY2tsaXN0LmNvbnRhaW5lci5maXJzdENoaWxkKTtcclxuICAgICAgICBsaXN0SXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGlja2xpc3QudXNlQWRkcmVzc0VudGVyZWQuY2xpY2spO1xyXG4gICAgICAgIHJldHVybiBsaXN0SXRlbTtcclxuICAgICAgfSxcclxuICAgICAgLy8gRGVzdHJveSB0aGUgXCJ1c2UgYWRkcmVzcyBlbnRlcmVkXCIgb3B0aW9uXHJcbiAgICAgIGRlc3Ryb3k6ICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5waWNrbGlzdC51c2VBZGRyZXNzRW50ZXJlZC5lbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnBpY2tsaXN0Lmxpc3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBpY2tsaXN0LnVzZUFkZHJlc3NFbnRlcmVkLmVsZW1lbnQpO1xyXG4gICAgICAgICAgdGhpcy5waWNrbGlzdC51c2VBZGRyZXNzRW50ZXJlZC5lbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgLy8gVXNlIHRoZSBhZGRyZXNzIGVudGVyZWQgYXMgdGhlIEZvcm1hdHRlZCBhZGRyZXNzXHJcbiAgICAgIGNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5wdXREYXRhID0ge1xyXG4gICAgICAgICAgcmVzdWx0OiB7XHJcbiAgICAgICAgICAgIGNvbmZpZGVuY2U6ICdObyBtYXRjaGVzJyxcclxuICAgICAgICAgICAgYWRkcmVzczoge1xyXG4gICAgICAgICAgICAgIGFkZHJlc3NfbGluZV8xOiAnJyxcclxuICAgICAgICAgICAgICBhZGRyZXNzX2xpbmVfMjogJycsXHJcbiAgICAgICAgICAgICAgYWRkcmVzc19saW5lXzM6ICcnLFxyXG4gICAgICAgICAgICAgIGxvY2FsaXR5OiAnJyxcclxuICAgICAgICAgICAgICByZWdpb246ICcnLFxyXG4gICAgICAgICAgICAgIHBvc3RhbF9jb2RlOiAnJyxcclxuICAgICAgICAgICAgICBjb3VudHJ5OiAnJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIC8vIFRyeSBhbmQgc3BsaXQgaW50byBsaW5lcyBieSB1c2luZyBjb21tYSBkZWxpbWl0ZXJcclxuICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5jdXJyZW50U2VhcmNoVGVybS5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgaWYgKGxpbmVzWzBdKSB7XHJcbiAgICAgICAgICAgIGlucHV0RGF0YS5yZXN1bHQuYWRkcmVzcy5hZGRyZXNzX2xpbmVfMSA9IGxpbmVzWzBdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGxpbmVzWzFdKSB7XHJcbiAgICAgICAgICAgIGlucHV0RGF0YS5yZXN1bHQuYWRkcmVzcy5hZGRyZXNzX2xpbmVfMiA9IGxpbmVzWzFdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGxpbmVzWzJdKSB7XHJcbiAgICAgICAgICAgIGlucHV0RGF0YS5yZXN1bHQuYWRkcmVzcy5hZGRyZXNzX2xpbmVfMyA9IGxpbmVzWzJdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDM7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpbnB1dERhdGEucmVzdWx0LmFkZHJlc3MuYWRkcmVzc19saW5lXzMgKz0gbGluZXNbaV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc3VsdC5zaG93KGlucHV0RGF0YSk7XHJcbiAgICAgICAgdGhpcy5yZXN1bHQudXBkYXRlSGVhZGluZyh0aGlzLm9wdGlvbnMuZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lci5tYW51YWxIZWFkaW5nVGV4dCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGFuIGFkZHJlc3MgbGluZSBvYmplY3Qgd2l0aCB0aGUga2V5IGFzIHRoZSBsYWJlbFxyXG4gICAgICBmb3JtYXRNYW51YWxBZGRyZXNzTGluZTogZnVuY3Rpb24gKGxpbmVzLCBpKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gZGVmYXVsdHMuYWRkcmVzc0xpbmVMYWJlbHNbaV07XHJcbiAgICAgICAgY29uc3QgbGluZU9iamVjdCA9IHt9O1xyXG4gICAgICAgIGxpbmVPYmplY3Rba2V5XSA9IGxpbmVzW2ldIHx8ICcnO1xyXG4gICAgICAgIHJldHVybiBsaW5lT2JqZWN0O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIENyZWF0ZSB0aGUgcGlja2xpc3QgbGlzdCAoYW5kIGNvbnRhaW5lcikgYW5kIGluamVjdCBhZnRlciB0aGUgaW5wdXRcclxuICAgIHRoaXMucGlja2xpc3QuY3JlYXRlTGlzdCA9ICgpID0+IHtcclxuICAgICAgLy8gSWYgU2luZ2xlbGluZSBtb2RlIGlzIHVzZWQsIHRoZW4gYXBwZW5kIHRoZSBwaWNrbGlzdCBhZnRlciB0aGUgbGFzdCBpbnB1dCBmaWVsZCwgb3RoZXJ3aXNlIHVzZSB0aGUgZmlyc3Qgb25lXHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5zZWFyY2hUeXBlID09PSBBZGRyZXNzVmFsaWRhdGlvblNlYXJjaFR5cGUuU0lOR0xFTElORSA/IHRoaXMuaW5wdXRzLmxlbmd0aCAtIDEgOiAwO1xyXG5cclxuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdhZGRyZXNzLXBpY2tsaXN0LWNvbnRhaW5lcicpO1xyXG4gICAgICB0aGlzLnBpY2tsaXN0LmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuXHJcbiAgICAgIC8vIEluc2VydCB0aGUgcGlja2xpc3QgY29udGFpbmVyIGFmdGVyIHRoZSBpbnB1dFxyXG4gICAgICB0aGlzLmlucHV0c1twb3NpdGlvbl0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5waWNrbGlzdC5jb250YWluZXIsIHRoaXMuaW5wdXRzW3Bvc2l0aW9uXS5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG5cclxuICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBsaXN0LmNsYXNzTGlzdC5hZGQoJ2FkZHJlc3MtcGlja2xpc3QnKTtcclxuICAgICAgLy8gQXBwZW5kIHRoZSBwaWNrbGlzdCB0byB0aGUgaW5uZXIgd3JhcHBlclxyXG4gICAgICB0aGlzLnBpY2tsaXN0LmNvbnRhaW5lci5hcHBlbmRDaGlsZChsaXN0KTtcclxuXHJcbiAgICAgIC8vIEFkZCBhIGNsYXNzIHRvIHRoZSBpbnB1dCB0byBkZW5vdGUgdGhhdCBhIHBpY2tsaXN0IHdpdGggc3VnZ2VzdGlvbnMgaXMgYmVpbmcgc2hvd25cclxuICAgICAgdGhpcy5pbnB1dHNbcG9zaXRpb25dLmNsYXNzTGlzdC5hZGQoJ3Nob3dpbmctc3VnZ2VzdGlvbnMnKTtcclxuXHJcbiAgICAgIGxpc3QuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMucGlja2xpc3QuY2hlY2tFbnRlcik7XHJcbiAgICAgIHJldHVybiBsaXN0O1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBDcmVhdGUgYSBuZXcgcGlja2xpc3QgaXRlbS9yb3dcclxuICAgIHRoaXMucGlja2xpc3QuY3JlYXRlTGlzdEl0ZW0gPSAoaXRlbTogUGlja2xpc3RJdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICByb3cuaW5uZXJIVE1MID0gdGhpcy5waWNrbGlzdC5hZGRNYXRjaGluZ0VtcGhhc2lzKGl0ZW0pO1xyXG5cclxuICAgICAgLy8gU3RvcmUgdGhlIEZvcm1hdCBVUkwgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgdXNlIHRoZSBnbG9iYWxfYWRkcmVzc19rZXkgYXMgYSBcInJlZmluZW1lbnRcIiBwcm9wZXJ0eVxyXG4gICAgICBpZiAoaXRlbS5mb3JtYXQpIHtcclxuICAgICAgICByb3cuc2V0QXR0cmlidXRlKCdmb3JtYXQnLCBpdGVtLmZvcm1hdCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5nbG9iYWxfYWRkcmVzc19rZXkpIHtcclxuICAgICAgICByb3cuc2V0QXR0cmlidXRlKCdyZWZpbmUnLCBpdGVtLmdsb2JhbF9hZGRyZXNzX2tleSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJvdztcclxuICAgIH07XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHBpY2tsaXN0IGl0ZW0vcm93IGZvciB3aGF0M3dvcmRzXHJcbiAgICB0aGlzLnBpY2tsaXN0LmNyZWF0ZVdoYXQzV29yZHNMaXN0SXRlbSA9IChpdGVtOiBXaGF0M1dvcmRzUGlja0xpc3QpID0+IHtcclxuICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnN0IG5hbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHJcbiAgICAgIHJvdy5jbGFzc05hbWUgPSBBZGRyZXNzVmFsaWRhdGlvbkxvb2t1cEtleXdvcmRzLldIQVQzV09SRFM7XHJcbiAgICAgIG5hbWUuY2xhc3NOYW1lID0gJ3doYXQzV29yZHMtbmFtZSc7XHJcbiAgICAgIGRlc2NyaXB0aW9uLmNsYXNzTmFtZSA9ICd3aGF0M1dvcmRzLWRlc2NyaXB0aW9uJztcclxuXHJcbiAgICAgIG5hbWUuaW5uZXJIVE1MID0gJy8vLycgKyBpdGVtLndoYXQzd29yZHMubmFtZTtcclxuICAgICAgZGVzY3JpcHRpb24uaW5uZXJIVE1MID0gaXRlbS53aGF0M3dvcmRzLmRlc2NyaXB0aW9uO1xyXG5cclxuICAgICAgcm93LmFwcGVuZENoaWxkKG5hbWUpO1xyXG4gICAgICByb3cuYXBwZW5kQ2hpbGQoZGVzY3JpcHRpb24pO1xyXG5cclxuICAgICAgcmV0dXJuIHJvdztcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8vIENyZWF0ZSBhIG5ldyBwaWNrbGlzdCBpdGVtL3JvdyBmb3IgbG9va3VwIGl0ZW1zXHJcbiAgICB0aGlzLnBpY2tsaXN0LmNyZWF0ZUxvb2t1cExpc3RJdGVtID0gKGl0ZW06IExvb2t1cEFkZHJlc3MpID0+IHtcclxuICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblxyXG4gICAgICByb3cuaW5uZXJIVE1MID0gaXRlbS50ZXh0O1xyXG5cclxuICAgICAgLy8gU3RvcmUgdGhlIEZvcm1hdCBVUkwgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgdXNlIHRoZSBnbG9iYWxfYWRkcmVzc19rZXkgYXMgYSBcInJlZmluZW1lbnRcIiBwcm9wZXJ0eVxyXG4gICAgICBpZiAoaXRlbS5mb3JtYXQpIHtcclxuICAgICAgICByb3cuc2V0QXR0cmlidXRlKCdmb3JtYXQnLCBpdGVtLmZvcm1hdCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5nbG9iYWxfYWRkcmVzc19rZXkpIHtcclxuICAgICAgICByb3cuc2V0QXR0cmlidXRlKCdyZWZpbmUnLCBpdGVtLmdsb2JhbF9hZGRyZXNzX2tleSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJvdztcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5waWNrbGlzdC5yZWZpbmUgPSB7XHJcbiAgICAgIGVsZW1lbnQ6IG51bGwsXHJcbiAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgcGlja2xpc3QgbmVlZHMgcmVmaW5pbmcuIFRoaXMgaGFwcGVucyBhZnRlciBhbiBpdGVtIGhhcyBiZWVuIFwic3RlcHBlZCBpbnRvXCIgYnV0IGhhcyBhbiB1bnJlc29sdmFibGUgcmFuZ2UuXHJcbiAgICAgIC8vIFRoZSB1c2VyIGlzIHByb21wdGVkIHRvIGVudGVyIHRoZWlyIHNlbGVjdGlvbiAoZS5nLiBidWlsZGluZyBudW1iZXIpLlxyXG4gICAgICBpc05lZWRlZDogKHJlc3BvbnNlOiBTZWFyY2hSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFR5cGUgIT09IEFkZHJlc3NWYWxpZGF0aW9uU2VhcmNoVHlwZS5BVVRPQ09NUExFVEUgJiYgKHJlc3BvbnNlLnJlc3VsdC5jb25maWRlbmNlID09PSAnUHJlbWlzZXMgcGFydGlhbCcgfHwgcmVzcG9uc2UucmVzdWx0LmNvbmZpZGVuY2UgPT09ICdTdHJlZXQgcGFydGlhbCcgfHwgcmVzcG9uc2UucmVzdWx0LmNvbmZpZGVuY2UgPT09ICdNdWx0aXBsZSBtYXRjaGVzJyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNyZWF0ZUlucHV0OiAocHJvbXB0OiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBpY2tsaXN0LXJlZmluZW1lbnQtYm94JykgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgcm93LmNsYXNzTGlzdC5hZGQoJ3BpY2tsaXN0LXJlZmluZW1lbnQtYm94Jyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5waWNrbGlzdC1yZWZpbmVtZW50LWJveCBpbnB1dCcpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpO1xyXG4gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0Jyk7XHJcbiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsIHByb21wdCk7XHJcbiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdrZXknLCBrZXkpO1xyXG4gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnYXV0b2NvbXBsZXRlJywgJ25ldy1wYXNzd29yZCcpO1xyXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLnBpY2tsaXN0LnJlZmluZS5lbnRlci5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLnBpY2tsaXN0LnJlZmluZS5lbGVtZW50ID0gaW5wdXQ7XHJcblxyXG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9ICg8SFRNTEJ1dHRvbkVsZW1lbnQ+ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBpY2tsaXN0LXJlZmluZW1lbnQtYm94IGJ1dHRvbicpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpKTtcclxuICAgICAgICBidXR0b24uaW5uZXJUZXh0ID0gJ1JlZmluZSc7XHJcbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrbGlzdC5yZWZpbmUuZW50ZXIpO1xyXG5cclxuICAgICAgICByb3cuYXBwZW5kQ2hpbGQoaW5wdXQpO1xyXG4gICAgICAgIHJvdy5hcHBlbmRDaGlsZChidXR0b24pO1xyXG4gICAgICAgIHRoaXMucGlja2xpc3QubGlzdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyb3csIHRoaXMucGlja2xpc3QubGlzdCk7XHJcblxyXG4gICAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVudGVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgLy8gQWxsb3cgYSBuZXcgcmVmaW5lbWVudCBlbnRyeSBpZiB0aGUgZW50ZXIga2V5IHdhcyB1c2VkIGluc2lkZSB0aGUgdGV4dGJveCBvciB0aGUgYnV0dG9uIHdhcyBjbGlja2VkXHJcbiAgICAgICAgaWYgKChldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQgJiYgZXZlbnQua2V5ID09PSAnRW50ZXInKSB8fCBldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpIHtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgLy8gSWYgYSBwaWNrbGlzdCBpdGVtIGlzIGN1cnJlbnRseSBzZWxlY3RlZCwgdGhlbiBwb3RlbnRpYWxseSB1c2UgdGhpcyBpbnN0ZWFkIG9mIHdoYXQncyBpbiB0aGUgaW5wdXQgZmllbGRcclxuICAgICAgICAgIGlmICh0aGlzLnBpY2tsaXN0LmN1cnJlbnRJdGVtKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGlja2xpc3QuY2hlY2tFbnRlcihldmVudCBhcyBLZXlib2FyZEV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICAgIC8vIFRha2UgdGhlIHZhbHVlIGZyb20gdGhlIGlucHV0IGZpZWxkIGFuZCB1c2UgdGhpcyB0byBmdXJ0aGVyIHJlZmluZSB0aGUgYWRkcmVzc1xyXG4gICAgICAgICAgaWYgKHRoaXMucGlja2xpc3QucmVmaW5lLmVsZW1lbnQudmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KHsgcmVmaW5lbWVudDogdGhpcy5waWNrbGlzdC5yZWZpbmUuZWxlbWVudC52YWx1ZSB9KTtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5waWNrbGlzdC5yZWZpbmUuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2tleScpO1xyXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3Quc2VuZChgJHt0aGlzLmJhc2VVcmx9JHt0aGlzLnJlZmluZUVuZHBvaW50fS8ke2tleX1gLCAnUE9TVCcsIHRoaXMucmVzdWx0LmhhbmRsZVZhbGlkYXRlUmVzcG9uc2UsIGRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5waWNrbGlzdC5zaXplICYmIGV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpKSB7XHJcbiAgICAgICAgICB0aGlzLnBpY2tsaXN0LmtleXVwKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5waWNrbGlzdC5yZXNldFRhYkNvdW50ID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLnBpY2tsaXN0LnRhYkNvdW50ID0gLTE7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEtleWJvYXJkIG5hdmlnYXRpb25cclxuICAgIHRoaXMucGlja2xpc3Qua2V5dXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnBpY2tsaXN0Lmxpc3QpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucGlja2xpc3QuY2hlY2tFbnRlcihldmVudCk7XHJcblxyXG4gICAgICAvLyBHZXQgYSBsaXN0IG9mIGFsbCB0aGUgYWRkcmVzc2VzIGluIHRoZSBwaWNrbGlzdFxyXG4gICAgICBjb25zdCBhZGRyZXNzZXMgPSB0aGlzLnBpY2tsaXN0Lmxpc3QucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XHJcbiAgICAgIGxldCBmaXJzdEFkZHJlc3M7XHJcbiAgICAgIGxldCBsYXN0QWRkcmVzcztcclxuXHJcbiAgICAgIC8vIElmIHRoZSBwaWNrbGlzdCBpcyBlbXB0eSwganVzdCByZXR1cm5cclxuICAgICAgaWYgKGFkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNldCB0aGUgdGFiQ291bnQgYmFzZWQgb24gcHJldmlvdXMgYW5kIGRpcmVjdGlvblxyXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuICAgICAgICB0aGlzLnBpY2tsaXN0LnRhYkNvdW50LS07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG4gICAgICAgIHRoaXMucGlja2xpc3QudGFiQ291bnQrKztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2V0IHRvcCBhbmQgYm90dG9tIHBvc2l0aW9ucyBhbmQgZW5hYmxlIHdyYXAtYXJvdW5kXHJcbiAgICAgIGlmICh0aGlzLnBpY2tsaXN0LnRhYkNvdW50IDwgMCkge1xyXG4gICAgICAgIHRoaXMucGlja2xpc3QudGFiQ291bnQgPSBhZGRyZXNzZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICBsYXN0QWRkcmVzcyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucGlja2xpc3QudGFiQ291bnQgPiBhZGRyZXNzZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIHRoaXMucGlja2xpc3QudGFiQ291bnQgPSAwO1xyXG4gICAgICAgIGZpcnN0QWRkcmVzcyA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEhpZ2hsaWdodCB0aGUgc2VsZWN0ZWQgYWRkcmVzc1xyXG4gICAgICBjb25zdCBjdXJyZW50bHlIaWdobGlnaHRlZCA9IGFkZHJlc3Nlc1t0aGlzLnBpY2tsaXN0LnRhYkNvdW50XTtcclxuICAgICAgLy8gUmVtb3ZlIGFueSBwcmV2aW91c2x5IGhpZ2hsaWdodGVkIG9uZXNcclxuICAgICAgY29uc3QgcHJldmlvdXNseUhpZ2hsaWdodGVkID0gdGhpcy5waWNrbGlzdC5saXN0LnF1ZXJ5U2VsZWN0b3IoJy5zZWxlY3RlZCcpO1xyXG4gICAgICBpZiAocHJldmlvdXNseUhpZ2hsaWdodGVkKSB7XHJcbiAgICAgICAgcHJldmlvdXNseUhpZ2hsaWdodGVkLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJyk7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudGx5SGlnaGxpZ2h0ZWQuY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcclxuICAgICAgLy8gU2V0IHRoZSBjdXJyZW50SXRlbSBvbiB0aGUgcGlja2xpc3QgdG8gdGhlIGN1cnJlbnRseSBoaWdobGlnaHRlZCBhZGRyZXNzXHJcbiAgICAgIHRoaXMucGlja2xpc3QuY3VycmVudEl0ZW0gPSBjdXJyZW50bHlIaWdobGlnaHRlZDtcclxuXHJcbiAgICAgIC8vIFNjcm9sbCBhZGRyZXNzIGludG8gdmlldywgaWYgcmVxdWlyZWRcclxuICAgICAgY29uc3QgYWRkcmVzc0xpc3RDb29yZHMgPSB7XHJcbiAgICAgICAgdG9wOiB0aGlzLnBpY2tsaXN0Lmxpc3Qub2Zmc2V0VG9wLFxyXG4gICAgICAgIGJvdHRvbTogdGhpcy5waWNrbGlzdC5saXN0Lm9mZnNldFRvcCArIHRoaXMucGlja2xpc3QubGlzdC5vZmZzZXRIZWlnaHQsXHJcbiAgICAgICAgc2Nyb2xsVG9wOiB0aGlzLnBpY2tsaXN0Lmxpc3Quc2Nyb2xsVG9wLFxyXG4gICAgICAgIHNlbGVjdGVkVG9wOiBjdXJyZW50bHlIaWdobGlnaHRlZC5vZmZzZXRUb3AsXHJcbiAgICAgICAgc2VsZWN0ZWRCb3R0b206IGN1cnJlbnRseUhpZ2hsaWdodGVkLm9mZnNldFRvcCArIGN1cnJlbnRseUhpZ2hsaWdodGVkLm9mZnNldEhlaWdodCxcclxuICAgICAgICBzY3JvbGxBbW91bnQ6IGN1cnJlbnRseUhpZ2hsaWdodGVkLm9mZnNldEhlaWdodFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoZmlyc3RBZGRyZXNzKSB7XHJcbiAgICAgICAgdGhpcy5waWNrbGlzdC5saXN0LnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobGFzdEFkZHJlc3MpIHtcclxuICAgICAgICB0aGlzLnBpY2tsaXN0Lmxpc3Quc2Nyb2xsVG9wID0gOTk5O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGFkZHJlc3NMaXN0Q29vcmRzLnNlbGVjdGVkQm90dG9tICsgYWRkcmVzc0xpc3RDb29yZHMuc2Nyb2xsQW1vdW50ID4gYWRkcmVzc0xpc3RDb29yZHMuYm90dG9tKSB7XHJcbiAgICAgICAgdGhpcy5waWNrbGlzdC5saXN0LnNjcm9sbFRvcCA9IGFkZHJlc3NMaXN0Q29vcmRzLnNjcm9sbFRvcCArIGFkZHJlc3NMaXN0Q29vcmRzLnNjcm9sbEFtb3VudDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhZGRyZXNzTGlzdENvb3Jkcy5zZWxlY3RlZFRvcCAtIGFkZHJlc3NMaXN0Q29vcmRzLnNjcm9sbEFtb3VudCAtIGFkZHJlc3NMaXN0Q29vcmRzLnRvcCA8IGFkZHJlc3NMaXN0Q29vcmRzLnNjcm9sbFRvcCkge1xyXG4gICAgICAgIHRoaXMucGlja2xpc3QubGlzdC5zY3JvbGxUb3AgPSBhZGRyZXNzTGlzdENvb3Jkcy5zY3JvbGxUb3AgLSBhZGRyZXNzTGlzdENvb3Jkcy5zY3JvbGxBbW91bnQ7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8gQWRkIGVtcGhhc2lzIHRvIHRoZSBwaWNrbGlzdCBpdGVtcyBoaWdobGlnaHRpbmcgdGhlIG1hdGNoXHJcbiAgICB0aGlzLnBpY2tsaXN0LmFkZE1hdGNoaW5nRW1waGFzaXMgPSBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICBjb25zdCBoaWdobGlnaHRzID0gaXRlbS5tYXRjaGVkIHx8IFtdO1xyXG4gICAgICBsZXQgbGFiZWwgPSBpdGVtLnRleHQ7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGlnaGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gJzxiPicgKyBsYWJlbC5zdWJzdHJpbmcoaGlnaGxpZ2h0c1tpXVswXSwgaGlnaGxpZ2h0c1tpXVsxXSkgKyAnPC9iPic7XHJcbiAgICAgICAgbGFiZWwgPSBsYWJlbC5zdWJzdHJpbmcoMCwgaGlnaGxpZ2h0c1tpXVswXSkgKyByZXBsYWNlbWVudCArIGxhYmVsLnN1YnN0cmluZyhoaWdobGlnaHRzW2ldWzFdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGxhYmVsO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBMaXN0ZW4gdG8gYSBwaWNrbGlzdCBzZWxlY3Rpb25cclxuICAgIHRoaXMucGlja2xpc3QubGlzdGVuID0gKHJvdykgPT4ge1xyXG4gICAgICByb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2tsaXN0LnBpY2suYmluZChudWxsLCByb3cpKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5waWNrbGlzdC5jaGVja0VudGVyID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnVGFiJykge1xyXG4gICAgICAgIGxldCBwaWNrbGlzdEl0ZW07XHJcbiAgICAgICAgLy8gSWYgcGlja2xpc3QgY29udGFpbnMgMSBhZGRyZXNzIHRoZW4gdXNlIHRoaXMgb25lIHRvIGZvcm1hdFxyXG4gICAgICAgIGlmICh0aGlzLnBpY2tsaXN0LnNpemUgPT09IDEpIHtcclxuICAgICAgICAgIHBpY2tsaXN0SXRlbSA9IHRoaXMucGlja2xpc3QubGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKVswXTtcclxuICAgICAgICB9IC8vIEVsc2UgdXNlIHRoZSBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgb25lIHdoZW4gbmF2aWdhdGlvbiB1c2luZyBrZXlib2FyZFxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGlja2xpc3QuY3VycmVudEl0ZW0pIHtcclxuICAgICAgICAgIHBpY2tsaXN0SXRlbSA9IHRoaXMucGlja2xpc3QuY3VycmVudEl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwaWNrbGlzdEl0ZW0pIHtcclxuICAgICAgICAgIHRoaXMucGlja2xpc3QucGljayhwaWNrbGlzdEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBIb3cgdG8gaGFuZGxlIGEgcGlja2xpc3Qgc2VsZWN0aW9uXHJcbiAgICB0aGlzLnBpY2tsaXN0LnBpY2sgPSAoaXRlbSkgPT4ge1xyXG4gICAgICAvLyBGaXJlIGFuIGV2ZW50IHdoZW4gYW4gYWRkcmVzcyBpcyBwaWNrZWRcclxuICAgICAgdGhpcy5ldmVudHMudHJpZ2dlcigncG9zdC1waWNrbGlzdC1zZWxlY3Rpb24nLCBpdGVtKTtcclxuXHJcbiAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucyhBZGRyZXNzVmFsaWRhdGlvbkxvb2t1cEtleXdvcmRzLldIQVQzV09SRFMpKXtcclxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGl0ZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMubG9va3VwKGVsZW1lbnRzWzBdLmlubmVySFRNTCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gR2V0IGEgZmluYWwgYWRkcmVzcyB1c2luZyBwaWNrbGlzdCBpdGVtIHVubGVzcyBpdCBuZWVkcyByZWZpbmVtZW50XHJcbiAgICAgICAgaWYgKGl0ZW0uZ2V0QXR0cmlidXRlKCdmb3JtYXQnKSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtYXQoaXRlbS5nZXRBdHRyaWJ1dGUoJ2Zvcm1hdCcpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZWZpbmUoaXRlbS5nZXRBdHRyaWJ1dGUoJ3JlZmluZScpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdCh1cmw6IHN0cmluZykge1xyXG4gICAgLy8gVHJpZ2dlciBhbiBldmVudFxyXG4gICAgdGhpcy5ldmVudHMudHJpZ2dlcigncHJlLWZvcm1hdHRpbmctc2VhcmNoJywgdXJsKTtcclxuXHJcbiAgICAvLyBIaWRlIHRoZSBzZWFyY2hpbmcgc3Bpbm5lclxyXG4gICAgdGhpcy5zZWFyY2hTcGlubmVyLmhpZGUoKTtcclxuXHJcbiAgICAvLyBJbml0aWF0ZSBhIG5ldyBGb3JtYXQgcmVxdWVzdFxyXG4gICAgdGhpcy5yZXF1ZXN0LnNlbmQodXJsLCAnR0VUJywgdGhpcy5yZXN1bHQuc2hvdywgdW5kZWZpbmVkLCBbeyBrZXk6ICdBZGQtTWV0YWRhdGEnLCB2YWx1ZTogdHJ1ZSB9LyosIHtrZXk6ICdBZGQtQ29tcG9uZW50cycsIHZhbHVlOiB0cnVlfSovXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZmluZShrZXk6IHN0cmluZykge1xyXG4gICAgLy8gVHJpZ2dlciBhbiBldmVudFxyXG4gICAgdGhpcy5ldmVudHMudHJpZ2dlcigncHJlLXJlZmluZW1lbnQnLCBrZXkpO1xyXG5cclxuICAgIC8vIEhpZGUgdGhlIHNlYXJjaGluZyBzcGlubmVyXHJcbiAgICB0aGlzLnNlYXJjaFNwaW5uZXIuaGlkZSgpO1xyXG5cclxuICAgIC8vIEluaXRpYXRlIGEgbmV3IFN0ZXAtaW4gcmVxdWVzdCB1c2luZyB0aGUgZ2xvYmFsIGFkZHJlc3Mga2V5XHJcbiAgICB0aGlzLnJlcXVlc3Quc2VuZChgJHt0aGlzLmJhc2VVcmx9JHt0aGlzLnN0ZXBJbkVuZHBvaW50fS8ke2tleX1gLCAnR0VUJywgdGhpcy5waWNrbGlzdC5zaG93KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9va3VwKGtleTogc3RyaW5nKSB7XHJcbiAgICAvLyBUcmlnZ2VyIGFuIGV2ZW50XHJcbiAgICB0aGlzLmV2ZW50cy50cmlnZ2VyKCdwcmUtbG9va3VwJywga2V5KTtcclxuXHJcbiAgICAvLyBIaWRlIHRoZSBzZWFyY2hpbmcgc3Bpbm5lclxyXG4gICAgdGhpcy5zZWFyY2hTcGlubmVyLmhpZGUoKTtcclxuXHJcbiAgICAvL0dldCB0aGUgbG9va3VwIHJlcXVldFxyXG4gICAgY29uc3QgbG9va3VwVjJSZXF1ZXN0ID0gdGhpcy5nZW5lcmF0ZUxvb2t1cERhdGFGb3JBcGlDYWxsKGtleSwgQWRkcmVzc1ZhbGlkYXRpb25Mb29rdXBLZXl3b3Jkcy5XSEFUM1dPUkRTKTtcclxuXHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJhc2VVcmwgKyB0aGlzLmxvb2t1cEVuZHBvaW50O1xyXG4gICAgY29uc3QgaGVhZGVycyA9IFt7IGtleTogJ0FkZC1BZGRyZXNzZXMnLCB2YWx1ZTogdHJ1ZSB9XTtcclxuICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5waWNrbGlzdC5zaG93TG9va3VwO1xyXG5cclxuICAgIC8vIEluaXRpYXRlIG5ldyBTZWFyY2ggcmVxdWVzdFxyXG4gICAgdGhpcy5yZXF1ZXN0LnNlbmQodXJsLCAnUE9TVCcsIGNhbGxiYWNrLCBsb29rdXBWMlJlcXVlc3QsIGhlYWRlcnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXN1bHQ6IEFkZHJlc3NWYWxpZGF0aW9uUmVzdWx0ID0ge1xyXG4gICAgZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lcjogbnVsbCxcclxuICAgIGxhc3RBZGRyZXNzRmllbGQ6IG51bGwsXHJcbiAgICBnZW5lcmF0ZUFkZHJlc3NMaW5lUmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgLy8gUmVuZGVyIGEgRm9ybWF0dGVkIGFkZHJlc3NcclxuICAgIHNob3c6IChkYXRhOiBTZWFyY2hSZXNwb25zZSkgPT4ge1xyXG4gICAgICAvLyBIaWRlIHRoZSBpbmxpbmUgc2VhcmNoIHNwaW5uZXJcclxuICAgICAgdGhpcy5zZWFyY2hTcGlubmVyLmhpZGUoKTtcclxuXHJcbiAgICAgIC8vIEhpZGUgdGhlIHBpY2tsaXN0XHJcbiAgICAgIHRoaXMucGlja2xpc3QuaGlkZSgpO1xyXG5cclxuICAgICAgLy8gQ2xlYXIgdGhlIHByZXZpb3VzIHNlYXJjaCB0ZXJtXHJcbiAgICAgIHRoaXMubGFzdFNlYXJjaFRlcm0gPSAnJztcclxuXHJcbiAgICAgIC8vIEFsbG93IEF1dG9jb21wbGV0ZSB0aHJvdWdoIGFzIGl0IHdpbGwgbmVlZCB0byBjcmVhdGUgdGhlIGFkZGl0aW9uYWwgb3V0cHV0IGZpZWxkcyBmb3IgdGhlIGZpbmFsIGFkZHJlc3MuXHJcbiAgICAgIC8vIE90aGVyd2lzZSwgb25seSByZW5kZXIgdGhlIGZpbmFsIGFkZHJlc3MgaWYgdGhlcmUgYXJlIHJlc3VsdHMgYXZhaWxhYmxlLlxyXG4gICAgICBpZiAodGhpcy5zZWFyY2hUeXBlID09PSBBZGRyZXNzVmFsaWRhdGlvblNlYXJjaFR5cGUuQVVUT0NPTVBMRVRFIHx8IChkYXRhLnJlc3VsdC5hZGRyZXNzICYmIGRhdGEucmVzdWx0LmNvbmZpZGVuY2UgIT09ICdObyBtYXRjaGVzJykpIHtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgc2VhcmNoIGlucHV0KHMpXHJcbiAgICAgICAgdGhpcy5pbnB1dHMuZm9yRWFjaChpbnB1dCA9PiBpbnB1dC52YWx1ZSA9ICcnKTtcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGlmIHdlIG5lZWRlZCB0byBnZW5lcmF0ZSB0aGUgZm9ybWF0dGVkIGFkZHJlc3MgaW5wdXQgZmllbGRzIGxhdGVyXHJcbiAgICAgICAgdGhpcy5yZXN1bHQuY2FsY3VsYXRlSWZBZGRyZXNzTGluZUdlbmVyYXRpb25SZXF1aXJlZCgpO1xyXG5cclxuICAgICAgICAvLyBHZXQgZm9ybWF0dGVkIGFkZHJlc3MgY29udGFpbmVyIGVsZW1lbnRcclxuICAgICAgICAvLyBPbmx5IGNyZWF0ZSBhIGNvbnRhaW5lciBpZiB3ZSdyZSBjcmVhdGluZyBpbnB1dHMuIE90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGhhdmUgdGhlaXIgb3duIGNvbnRhaW5lci5cclxuICAgICAgICB0aGlzLnJlc3VsdC5mb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyID0gdGhpcy5vcHRpb25zLmVsZW1lbnRzLmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXI7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdC5mb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyICYmIHRoaXMucmVzdWx0LmdlbmVyYXRlQWRkcmVzc0xpbmVSZXF1aXJlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHQuY3JlYXRlRm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTG9vcCBvdmVyIGVhY2ggZm9ybWF0dGVkIGFkZHJlc3MgY29tcG9uZW50XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBPYmplY3Qua2V5cyhkYXRhLnJlc3VsdC5hZGRyZXNzKS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoZGF0YS5yZXN1bHQuYWRkcmVzcylbaV07XHJcbiAgICAgICAgICBjb25zdCBhZGRyZXNzQ29tcG9uZW50ID0gZGF0YS5yZXN1bHQuYWRkcmVzc1trZXldO1xyXG4gICAgICAgICAgLy8gQmluZCB0aGUgYWRkcmVzcyBlbGVtZW50IHRvIHRoZSB1c2VyJ3MgYWRkcmVzcyBmaWVsZCAob3IgY3JlYXRlIGEgbmV3IG9uZSlcclxuICAgICAgICAgIHRoaXMucmVzdWx0LnVwZGF0ZUFkZHJlc3NMaW5lKGtleSwgYWRkcmVzc0NvbXBvbmVudCwgJ2FkZHJlc3MtbGluZS1pbnB1dCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSGlkZSBjb3VudHJ5IGFuZCBhZGRyZXNzIHNlYXJjaCBmaWVsZHMgKGlmIHRoZXkgaGF2ZSBhICd0b2dnbGUnIGNsYXNzKVxyXG4gICAgICAgIHRoaXMudG9nZ2xlU2VhcmNoSW5wdXRzKCdoaWRlJyk7XHJcblxyXG4gICAgICAgIC8vIEVuYWJsZSB1c2VycyB0byBzZWFyY2ggYWdhaW4gc3Vic2VxdWVudGx5XHJcbiAgICAgICAgdGhpcy5oYXNTZWFyY2hJbnB1dEJlZW5SZXNldCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIElmIGFuIGFkZHJlc3MgbGluZSBpcyBhbHNvIHRoZSBtYWluIHNlYXJjaCBpbnB1dCwgc2V0IHByb3BlcnR5IHRvIGZhbHNlLlxyXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHR5cGluZyBpbiB0aGUgZmllbGQgYWdhaW4gKGFmdGVyIGFuIGFkZHJlc3MgaGFzIGJlZW5cclxuICAgICAgICAvLyByZXR1cm5lZCkgd2lsbCBub3QgdHJpZ2dlciBhIG5ldyBzZWFyY2guXHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVHlwZSA9PT0gQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlLkFVVE9DT01QTEVURSkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IGluIHRoaXMub3B0aW9ucy5lbGVtZW50cykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMub3B0aW9ucy5lbGVtZW50cywgZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAvLyBFeGNsdWRpbmcgdGhlIGlucHV0IGl0c2VsZiwgZG9lcyBhbm90aGVyIGVsZW1lbnQgbWF0Y2ggdGhlIGlucHV0IGZpZWxkP1xyXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50ICE9PSAnaW5wdXQnICYmIHRoaXMub3B0aW9ucy5lbGVtZW50c1tlbGVtZW50XSA9PT0gdGhpcy5pbnB1dHNbMF0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzU2VhcmNoSW5wdXRCZWVuUmVzZXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHRoZSAnU2VhcmNoIGFnYWluJyBsaW5rIGFuZCBpbnNlcnQgaW50byBET01cclxuICAgICAgICB0aGlzLnJlc3VsdC5jcmVhdGVTZWFyY2hBZ2FpbkxpbmsoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRmlyZSBhbiBldmVudCB0byBzYXkgd2UndmUgZ290IHRoZSBmb3JtYXR0ZWQgYWRkcmVzc1xyXG4gICAgICB0aGlzLmV2ZW50cy50cmlnZ2VyKCdwb3N0LWZvcm1hdHRpbmctc2VhcmNoJywgZGF0YSk7XHJcbiAgICB9LFxyXG4gICAgaGlkZTogKCkgPT4ge1xyXG4gICAgICAvLyBEZWxldGUgdGhlIGZvcm1hdHRlZCBhZGRyZXNzIGNvbnRhaW5lclxyXG4gICAgICBpZiAodGhpcy5yZXN1bHQuZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lcikge1xyXG4gICAgICAgIHRoaXMucmVzdWx0LmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJlc3VsdC5mb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyKTtcclxuICAgICAgICB0aGlzLnJlc3VsdC5mb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIERlbGV0ZSB0aGUgc2VhcmNoIGFnYWluIGxpbmtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWFyY2hBZ2Fpbi5saW5rKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnNlYXJjaEFnYWluLmxpbmsucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnMuc2VhcmNoQWdhaW4ubGluayk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnNlYXJjaEFnYWluLmxpbmsgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgICAgLy8gUmVtb3ZlIHByZXZpb3VzIHZhbHVlIGZyb20gdXNlcidzIHJlc3VsdCBmaWVsZFxyXG4gICAgICAvLyBMb29wIG92ZXIgdGhlaXIgZWxlbWVudHNcclxuICAgICAgZm9yIChjb25zdCBlbGVtZW50IGluIHRoaXMub3B0aW9ucy5lbGVtZW50cykge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5vcHRpb25zLmVsZW1lbnRzLCBlbGVtZW50KSkge1xyXG4gICAgICAgICAgLy8gSWYgaXQgbWF0Y2hlcyBhbiBcImFkZHJlc3NcIiBlbGVtZW50XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlZmF1bHRzLmFkZHJlc3NMaW5lTGFiZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gZGVmYXVsdHMuYWRkcmVzc0xpbmVMYWJlbHNbaV07XHJcbiAgICAgICAgICAgIC8vIE9ubHkgcmVzZXQgdGhlIHZhbHVlIGlmIGl0J3Mgbm90IGFuIGlucHV0IGZpZWxkXHJcbiAgICAgICAgICAgIGlmIChsYWJlbCA9PT0gZWxlbWVudCAmJiB0aGlzLm9wdGlvbnMuZWxlbWVudHNbZWxlbWVudF0gIT09IHRoaXMuaW5wdXRzWzBdKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmVsZW1lbnRzW2VsZW1lbnRdLnZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjcmVhdGVBZGRyZXNzTGluZToge1xyXG4gICAgICAvLyBDcmVhdGUgYW4gaW5wdXQgdG8gc3RvcmUgdGhlIGFkZHJlc3MgbGluZVxyXG4gICAgICBpbnB1dDogKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBjbGFzc05hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIC8vIENyZWF0ZSBhIHdyYXBwZXJcclxuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBkaXYuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgdGhlIGxhYmVsXHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xyXG4gICAgICAgIGxhYmVsLmlubmVySFRNTCA9IGtleS5yZXBsYWNlKC8oW0EtWl0pL2csICcgJDEnKSAvLyBBZGQgc3BhY2UgYmVmb3JlIGNhcGl0YWwgTGV0dGVyc1xyXG4gICAgICAgICAgLnJlcGxhY2UoLyhbMC05XSkvZywgJyAkMScpIC8vIEFkZCBzcGFjZSBiZWZvcmUgbnVtYmVyc1xyXG4gICAgICAgICAgLnJlcGxhY2UoL14uLywgZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7IH0pOyAvLyBNYWtlIGZpcnN0IGxldHRlciBvZiB3b3JkIGEgY2FwaXRhbCBsZXR0ZXJcclxuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobGFiZWwpO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgdGhlIGlucHV0XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0Jyk7XHJcbiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywga2V5KTtcclxuICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdmFsdWUpO1xyXG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChpbnB1dCk7XHJcbiAgICAgICAgcmV0dXJuIGRpdjtcclxuICAgICAgfSxcclxuICAgICAgLy8gQ3JlYXRlIHRoZSBhZGRyZXNzIGxpbmUgbGFiZWwgYmFzZWQgb24gdGhlIGNvdW50cnkgYW5kIGxhbmd1YWdlXHJcbiAgICAgIGxhYmVsOiAoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBsZXQgbGFiZWwgPSBrZXk7XHJcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBjb3VudHJ5ID0gdGhpcy5jdXJyZW50Q291bnRyeUNvZGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAodHJhbnNsYXRpb25zKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkTGFiZWwgPSB0cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdW2NvdW50cnldW2tleV07XHJcbiAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkTGFiZWwpIHtcclxuICAgICAgICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZWRMYWJlbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBUcmFuc2xhdGlvbiBkb2Vzbid0IGV4aXN0IGZvciBrZXlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxhYmVsO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgLy8gQ3JlYXRlIHRoZSBmb3JtYXR0ZWQgYWRkcmVzcyBjb250YWluZXIgYW5kIGluamVjdCBhZnRlciB0aGUgaW5wdXRcclxuICAgIGNyZWF0ZUZvcm1hdHRlZEFkZHJlc3NDb250YWluZXI6ICgpID0+IHtcclxuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdmb3JtYXR0ZWQtYWRkcmVzcycpO1xyXG5cclxuICAgICAgLy8gSWYgU2luZ2xlbGluZSBtb2RlIGlzIHVzZWQsIHRoZW4gYXBwZW5kIHRoZSBmb3JtYXR0ZWQgYWRkcmVzcyBhZnRlciB0aGUgbGFzdCBpbnB1dCBmaWVsZCwgb3RoZXJ3aXNlIHVzZSB0aGUgZmlyc3Qgb25lXHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5zZWFyY2hUeXBlID09PSBBZGRyZXNzVmFsaWRhdGlvblNlYXJjaFR5cGUuU0lOR0xFTElORSA/IHRoaXMuaW5wdXRzLmxlbmd0aCAtIDEgOiAwO1xyXG5cclxuICAgICAgLy8gSW5zZXJ0IHRoZSBjb250YWluZXIgYWZ0ZXIgdGhlIGlucHV0XHJcbiAgICAgIHRoaXMuaW5wdXRzW3Bvc2l0aW9uXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb250YWluZXIsIHRoaXMuaW5wdXRzW3Bvc2l0aW9uXS5uZXh0U2libGluZyk7XHJcbiAgICAgIHRoaXMucmVzdWx0LmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICB9LFxyXG4gICAgLy8gQ3JlYXRlIGEgaGVhZGluZyBmb3IgdGhlIGZvcm1hdHRlZCBhZGRyZXNzIGNvbnRhaW5lclxyXG4gICAgY3JlYXRlSGVhZGluZzogKCkgPT4ge1xyXG4gICAgICAvLyBDcmVhdGUgYSBoZWFkaW5nIGZvciB0aGUgZm9ybWF0dGVkIGFkZHJlc3NcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyLnNob3dIZWFkaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIuaGVhZGluZ1R5cGUpO1xyXG4gICAgICAgIGhlYWRpbmcuaW5uZXJIVE1MID0gdGhpcy5vcHRpb25zLmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIudmFsaWRhdGVkSGVhZGluZ1RleHQ7XHJcbiAgICAgICAgdGhpcy5yZXN1bHQuZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lci5hcHBlbmRDaGlsZChoZWFkaW5nKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIFVwZGF0ZSB0aGUgaGVhZGluZyB0ZXh0IGluIHRoZSBmb3JtYXR0ZWQgYWRkcmVzcyBjb250YWluZXJcclxuICAgIHVwZGF0ZUhlYWRpbmc6ICh0ZXh0KSA9PiB7XHJcbiAgICAgIC8vQ2hhbmdlIHRoZSBoZWFkaW5nIHRleHQgdG8gXCJNYW51YWwgYWRkcmVzcyBlbnRlcmVkXCJcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyLnNob3dIZWFkaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGluZyA9IHRoaXMucmVzdWx0LmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIucXVlcnlTZWxlY3Rvcih0aGlzLm9wdGlvbnMuZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lci5oZWFkaW5nVHlwZSk7XHJcbiAgICAgICAgaGVhZGluZy5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgY2FsY3VsYXRlSWZBZGRyZXNzTGluZUdlbmVyYXRpb25SZXF1aXJlZDogKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlc3VsdC5nZW5lcmF0ZUFkZHJlc3NMaW5lUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlZmF1bHRzLmFkZHJlc3NMaW5lTGFiZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gZGVmYXVsdHMuYWRkcmVzc0xpbmVMYWJlbHNbaV07XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbGVtZW50c1trZXldKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdC5nZW5lcmF0ZUFkZHJlc3NMaW5lUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHVwZGF0ZUFkZHJlc3NMaW5lOiAoa2V5OiBzdHJpbmcsIGFkZHJlc3NMaW5lT2JqZWN0LCBjbGFzc05hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAvLyBFaXRoZXIgYXBwZW5kIHRoZSByZXN1bHQgdG8gdGhlIHVzZXIncyBhZGRyZXNzIGZpZWxkIG9yIGNyZWF0ZSBhIG5ldyBmaWVsZCBmb3IgdGhlbVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVsZW1lbnRzW2tleV0pIHtcclxuICAgICAgICBjb25zdCBhZGRyZXNzRmllbGQgPSB0aGlzLm9wdGlvbnMuZWxlbWVudHNba2V5XTtcclxuICAgICAgICB0aGlzLnJlc3VsdC51cGRhdGVMYWJlbChrZXkpO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGFkZHJlc3NMaW5lT2JqZWN0O1xyXG4gICAgICAgIC8vIElmIGEgdmFsdWUgaXMgYWxyZWFkeSBwcmVzZW50LCBwcmVwZW5kIGEgY29tbWEgYW5kIHNwYWNlXHJcbiAgICAgICAgaWYgKGFkZHJlc3NGaWVsZC52YWx1ZSAmJiB2YWx1ZSkge1xyXG4gICAgICAgICAgdmFsdWUgPSAnLCAnICsgdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIERlY2lkZSB3aGF0IHByb3BlcnR5IG9mIHRoZSBub2RlIHdlIG5lZWQgdG8gdXBkYXRlLiBpLmUuIGlmIGl0J3Mgbm90IGEgZm9ybSBmaWVsZCwgdXBkYXRlIHRoZSBpbm5lclRleHQuXHJcbiAgICAgICAgaWYgKGFkZHJlc3NGaWVsZC5ub2RlTmFtZSA9PT0gJ0lOUFVUJyB8fCBhZGRyZXNzRmllbGQubm9kZU5hbWUgPT09ICdURVhUQVJFQScgfHwgYWRkcmVzc0ZpZWxkLm5vZGVOYW1lID09PSAnU0VMRUNUJykge1xyXG4gICAgICAgICAgYWRkcmVzc0ZpZWxkLnZhbHVlICs9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhZGRyZXNzRmllbGQuaW5uZXJUZXh0ICs9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBTdG9yZSBhIHJlY29yZCBvZiB0aGVpciBsYXN0IGFkZHJlc3MgZmllbGRcclxuICAgICAgICB0aGlzLnJlc3VsdC5sYXN0QWRkcmVzc0ZpZWxkID0gYWRkcmVzc0ZpZWxkO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucmVzdWx0LmdlbmVyYXRlQWRkcmVzc0xpbmVSZXF1aXJlZCkge1xyXG4gICAgICAgIC8vIENyZWF0ZSBhbiBpbnB1dCB0byBzdG9yZSB0aGUgYWRkcmVzcyBsaW5lXHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc3VsdC5jcmVhdGVBZGRyZXNzTGluZS5sYWJlbChrZXkpO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5yZXN1bHQuY3JlYXRlQWRkcmVzc0xpbmUuaW5wdXQobGFiZWwsIGFkZHJlc3NMaW5lT2JqZWN0LCBjbGFzc05hbWUpO1xyXG4gICAgICAgIC8vIEluc2VydCBpbnRvIERPTVxyXG4gICAgICAgIHRoaXMucmVzdWx0LmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIuYXBwZW5kQ2hpbGQoZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgLy8gVXBkYXRlIHRoZSBsYWJlbCBpZiB0cmFuc2xhdGlvbiBpcyBwcmVzZW50XHJcbiAgICB1cGRhdGVMYWJlbDogKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGxldCBsYWJlbCA9IGtleTtcclxuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UudG9Mb3dlckNhc2UoKTtcclxuICAgICAgY29uc3QgY291bnRyeSA9IHRoaXMuY3VycmVudENvdW50cnlDb2RlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmICh0cmFuc2xhdGlvbnMpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgdHJhbnNsYXRlZExhYmVsID0gdHJhbnNsYXRpb25zW2xhbmd1YWdlXVtjb3VudHJ5XVtrZXldO1xyXG4gICAgICAgICAgaWYgKHRyYW5zbGF0ZWRMYWJlbCkge1xyXG4gICAgICAgICAgICBsYWJlbCA9IHRyYW5zbGF0ZWRMYWJlbDtcclxuICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xhYmVsJyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGFiZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGxhYmVsc1tpXS5odG1sRm9yID09PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsc1tpXS5pbm5lckhUTUwgPSB0cmFuc2xhdGVkTGFiZWw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gVHJhbnNsYXRpb24gZG9lc24ndCBleGlzdCBmb3Iga2V5XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBsYWJlbDtcclxuICAgIH0sXHJcbiAgICAvLyBDcmVhdGUgdGhlICdTZWFyY2ggYWdhaW4nIGxpbmsgdGhhdCByZXNldHMgdGhlIHNlYXJjaFxyXG4gICAgY3JlYXRlU2VhcmNoQWdhaW5MaW5rOiAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VhcmNoQWdhaW4udmlzaWJsZSkge1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcclxuICAgICAgICBsaW5rLmNsYXNzTGlzdC5hZGQoJ3NlYXJjaC1hZ2Fpbi1idXR0b24nKTtcclxuICAgICAgICBsaW5rLmlubmVyVGV4dCA9IHRoaXMub3B0aW9ucy5zZWFyY2hBZ2Fpbi50ZXh0O1xyXG4gICAgICAgIC8vIEJpbmQgZXZlbnQgbGlzdGVuZXJcclxuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5nbG9iYWxSZXNldC5iaW5kKHRoaXMpKTtcclxuICAgICAgICAvLyBTdG9yZSBhIHJlZmVyZW5jZSB0byB0aGUgbGluayBlbGVtZW50XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnNlYXJjaEFnYWluLmxpbmsgPSBsaW5rO1xyXG5cclxuICAgICAgICAvLyBJbnNlcnQgaW50byB0aGUgZm9ybWF0dGVkIGFkZHJlc3MgY29udGFpbmVyXHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0LmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIpIHtcclxuICAgICAgICAgIHRoaXMucmVzdWx0LmZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc3VsdC5sYXN0QWRkcmVzc0ZpZWxkKSB7XHJcbiAgICAgICAgICAvLyBJbnNlcnQgYWZ0ZXIgbGFzdCBhZGRyZXNzIGZpZWxkXHJcbiAgICAgICAgICB0aGlzLnJlc3VsdC5sYXN0QWRkcmVzc0ZpZWxkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGxpbmssIHRoaXMucmVzdWx0Lmxhc3RBZGRyZXNzRmllbGQubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIFdyaXRlIHRoZSBsaXN0IG9mIGhpZGRlbiBhZGRyZXNzIGxpbmUgaW5wdXRzIHRvIHRoZSBET01cclxuICAgIHJlbmRlcklucHV0TGlzdDogKGlucHV0QXJyYXkpID0+IHtcclxuICAgICAgaWYgKGlucHV0QXJyYXkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHQuZm9ybWF0dGVkQWRkcmVzc0NvbnRhaW5lci5hcHBlbmRDaGlsZChpbnB1dEFycmF5W2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvLyBEZWNpZGUgd2hldGhlciB0byBlaXRoZXIgc2hvdyBhIHBpY2tsaXN0IG9yIGEgdmVyaWZpZWQgcmVzdWx0IGZyb20gYSBWYWxpZGF0ZSByZXNwb25zZVxyXG4gICAgaGFuZGxlVmFsaWRhdGVSZXNwb25zZTogKHJlc3BvbnNlOiBTZWFyY2hSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2UucmVzdWx0LmNvbmZpZGVuY2UgPT09ICdWZXJpZmllZCBtYXRjaCcpIHtcclxuICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgY29udGFpbnMgYW4gYWRkcmVzcywgdGhlbiB1c2UgdGhpcyBkaXJlY3RseSBpbiB0aGUgcmVzdWx0XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdC5hZGRyZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdC5zaG93KHJlc3BvbnNlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnJlc3VsdC5zdWdnZXN0aW9ucykge1xyXG4gICAgICAgICAgLy8gSWYgdGhlIHZlcmlmaWVkIG1hdGNoIHN0aWxsIGNvbnRhaW5zIGEgc3VnZ2VzdGlvbiwgdGhlbiB3ZSBuZWVkIHRvIGZvcm1hdCB0aGlzIGZpcnN0XHJcbiAgICAgICAgICB0aGlzLmZvcm1hdChyZXNwb25zZS5yZXN1bHQuc3VnZ2VzdGlvbnNbMF0uZm9ybWF0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UucmVzdWx0LnN1Z2dlc3Rpb25zKSB7XHJcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgbmVlZHMgdG8gcGljayBhIHN1Z2dlc3Rpb24sIHRoZW4gZGlzcGxheSB0aGUgcGlja2xpc3RcclxuICAgICAgICB0aGlzLnBpY2tsaXN0LnNob3cocmVzcG9uc2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnJlc3VsdC5jb25maWRlbmNlID09PSAnTm8gbWF0Y2hlcycpIHtcclxuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hlcywgdGhlbiBhbGxvdyBcInVzZSBhZGRyZXNzIGVudGVyZWRcIlxyXG4gICAgICAgIHRoaXMucGlja2xpc3QuaGFuZGxlRW1wdHlQaWNrbGlzdChyZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIGNoZWNrVGFiKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleShldmVudCk7XHJcbiAgICBpZiAoa2V5ID09PSAnVGFiJykge1xyXG4gICAgICB0aGlzLnBpY2tsaXN0LmtleXVwKGV2ZW50KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgLy8gUHJldmVudCBhbiAnRW50ZXInIGtleXByZXNzIG9uIHRoZSBpbnB1dCBzdWJtaXR0aW5nIHRoZSBmb3JtXHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlYXJjaFNwaW5uZXIgPSB7XHJcbiAgICBzaG93OiAoKSA9PiB7XHJcbiAgICAgIC8vIFJldHVybiBpZiB3ZSdyZSBub3QgZGlzcGxheWluZyBhIHNwaW5uZXJcclxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudXNlU3Bpbm5lcikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBDcmVhdGUgdGhlIHNwaW5uZXIgY29udGFpbmVyXHJcbiAgICAgIGNvbnN0IHNwaW5uZXJDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgc3Bpbm5lckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdsb2FkZXInKTtcclxuICAgICAgc3Bpbm5lckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdsb2FkZXItaW5saW5lJyk7XHJcblxyXG4gICAgICAvLyBDcmVhdGUgdGhlIHNwaW5uZXJcclxuICAgICAgY29uc3Qgc3Bpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBzcGlubmVyLmNsYXNzTGlzdC5hZGQoJ3NwaW5uZXInKTtcclxuICAgICAgc3Bpbm5lckNvbnRhaW5lci5hcHBlbmRDaGlsZChzcGlubmVyKTtcclxuXHJcbiAgICAgIC8vIEluc2VydCB0aGUgc3Bpbm5lciBhZnRlciB0aGUgZmllbGRcclxuICAgICAgdGhpcy5pbnB1dHNbMF0ucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKHNwaW5uZXJDb250YWluZXIsIHRoaXMuaW5wdXRzWzBdLm5leHRTaWJsaW5nKTtcclxuICAgIH0sXHJcblxyXG4gICAgaGlkZTogKCkgPT4ge1xyXG4gICAgICAvLyBSZXR1cm4gaWYgd2UncmUgbm90IGRpc3BsYXlpbmcgYSBzcGlubmVyXHJcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLnVzZVNwaW5uZXIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc3Bpbm5lciA9IHRoaXMuaW5wdXRzWzBdLnBhcmVudE5vZGU/LnF1ZXJ5U2VsZWN0b3IoJy5sb2FkZXItaW5saW5lJyk7XHJcbiAgICAgIGlmIChzcGlubmVyKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHNbMF0ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoc3Bpbm5lcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBUb2dnbGUgdGhlIFwiaGlkZGVuXCIgY2xhc3MgdG8gZWl0aGVyIHNob3cgb3IgaGlkZSB0aGUgaW5wdXQgYW5kIGNvdW50cnkgZmllbGQocylcclxuICBwcml2YXRlIHRvZ2dsZVNlYXJjaElucHV0cyhzdGF0ZTogJ3Nob3cnIHwgJ2hpZGUnKSB7XHJcbiAgICBjb25zdCBtb2RpZmllciA9IHN0YXRlID09PSAnc2hvdycgPyAncmVtb3ZlJyA6ICdhZGQnO1xyXG4gICAgdGhpcy5vcHRpb25zLmVsZW1lbnRzLmlucHV0cz8uZm9yRWFjaChpbnB1dCA9PiBpbnB1dC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3RbbW9kaWZpZXJdKCdoaWRkZW4nKSkpO1xyXG4gICAgdGhpcy5vcHRpb25zLmVsZW1lbnRzLmNvdW50cnlMaXN0Py5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3RbbW9kaWZpZXJdKCdoaWRkZW4nKSk7XHJcbiAgICB0aGlzLm9wdGlvbnMuZWxlbWVudHMubG9va3VwQnV0dG9uPy5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3RbbW9kaWZpZXJdKCdoaWRkZW4nKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdsb2JhbFJlc2V0KGV2ZW50Pykge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgICAvLyBFbmFibGUgc2VhcmNoaW5nXHJcbiAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAvLyBIaWRlIGZvcm1hdHRlZCBhZGRyZXNzXHJcbiAgICB0aGlzLnJlc3VsdC5oaWRlKCk7XHJcbiAgICAvLyBSZXNldCBzZWFyY2ggaW5wdXQgYmFja1xyXG4gICAgdGhpcy5oYXNTZWFyY2hJbnB1dEJlZW5SZXNldCA9IHRydWU7XHJcblxyXG4gICAgLy8gQ2xlYXIgdGhlIGlucHV0IGZpZWxkKHMpXHJcbiAgICB0aGlzLmlucHV0cy5mb3JFYWNoKGlucHV0ID0+IGlucHV0LnZhbHVlID0gJycpO1xyXG4gICAgLy8gUmVtb3ZlIHRoZSBwaWNrbGlzdCAoaWYgcHJlc2VudClcclxuICAgIHRoaXMucGlja2xpc3QuaGlkZSgpO1xyXG4gICAgLy8gU2hvdyBzZWFyY2ggaW5wdXRcclxuICAgIHRoaXMudG9nZ2xlU2VhcmNoSW5wdXRzKCdzaG93Jyk7XHJcbiAgICAvLyBBcHBseSBmb2N1cyB0byBpbnB1dFxyXG4gICAgdGhpcy5pbnB1dHNbMF0uZm9jdXMoKTtcclxuXHJcbiAgICAvLyBSZXNldCB0byBkZWZhdWx0XHJcbiAgICB0aGlzLmF2TW9kZSA9IEFkZHJlc3NWYWxpZGF0aW9uTW9kZS5TRUFSQ0g7XHJcblxyXG4gICAgLy8gRmlyZSBhbiBldmVudCBhZnRlciBhIHJlc2V0XHJcbiAgICB0aGlzLmV2ZW50cy50cmlnZ2VyKCdwb3N0LXJlc2V0Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzSW50ZXJuYXRpb25hbFZhbGlkYXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCBkYXRhc2V0IGluZGljYXRlcyB0aGlzIGlzIGEgaW50ZXJuYXRpb25hbCBkYXRhIHZhbGlkYXRpb24gY2FsbFxyXG4gICAgaWYgKHRoaXMuc2VhcmNoVHlwZSA9PT0gQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlLlZBTElEQVRFXHJcbiAgICAgICYmICFBcnJheS5pc0FycmF5KHRoaXMuY3VycmVudERhdGFTZXQpIFxyXG4gICAgICAmJiB0aGlzLmN1cnJlbnREYXRhU2V0LnRvVXBwZXJDYXNlKCkuZW5kc1dpdGgoXCItRURcIikpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCBBZGRyZXNzVmFsaWRhdGlvbiBmcm9tICcuL2FkZHJlc3Mtc2VhcmNoJztcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIEFkZHJlc3NWYWxpZGF0aW9uOiBhbnk7XHJcbiAgfVxyXG59XHJcblxyXG53aW5kb3cuQWRkcmVzc1ZhbGlkYXRpb24gPSBBZGRyZXNzVmFsaWRhdGlvbjsiXSwibmFtZXMiOlsiQWRkcmVzc1ZhbGlkYXRpb25TZWFyY2hUeXBlIiwiQWRkcmVzc1ZhbGlkYXRpb25Nb2RlIiwiQWRkcmVzc1ZhbGlkYXRpb25Mb29rdXBLZXl3b3JkcyIsImNvbGxlY3Rpb24iLCJvbiIsImV2ZW50IiwiYWN0aW9uIiwidGhpcyIsInB1c2giLCJ0cmlnZ2VyIiwiZGF0YSIsImkiLCJsZW5ndGgiLCJhcmdzIiwiYSIsImFyZ3VtZW50cyIsImFwcGx5IiwiZSIsImluc3RhbmNlIiwic2VuZCIsInVybCIsIm1ldGhvZCIsImNhbGxiYWNrIiwiaGVhZGVycyIsImN1cnJlbnRSZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwidGltZW91dCIsInNldFJlcXVlc3RIZWFkZXIiLCJvcHRpb25zIiwidG9rZW4iLCJmb3JFYWNoIiwiaGVhZGVyIiwia2V5IiwidmFsdWUiLCJvbmxvYWQiLCJ4aHIiLCJzdGF0dXMiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJzZWFyY2hTcGlubmVyIiwiaGlkZSIsImV2ZW50cyIsIm9uZXJyb3IiLCJvbnRpbWVvdXQiLCJkZWZhdWx0cyIsImF2TW9kZSIsIlNFQVJDSCIsInNlYXJjaFR5cGUiLCJBVVRPQ09NUExFVEUiLCJpbnB1dCIsInBsYWNlaG9sZGVyVGV4dCIsImFwcGx5Rm9jdXMiLCJmb3JtYXR0ZWRBZGRyZXNzQ29udGFpbmVyIiwic2hvd0hlYWRpbmciLCJoZWFkaW5nVHlwZSIsInZhbGlkYXRlZEhlYWRpbmdUZXh0IiwibWFudWFsSGVhZGluZ1RleHQiLCJzZWFyY2hBZ2FpbiIsInZpc2libGUiLCJ0ZXh0IiwidXNlQWRkcmVzc0VudGVyZWRUZXh0IiwidXNlU3Bpbm5lciIsImxhbmd1YWdlIiwiYWRkcmVzc0xpbmVMYWJlbHMiLCJkYXRhc2V0Q29kZXMiLCJjb3VudHJ5IiwiaXNvM0NvZGUiLCJpc28yQ29kZSIsImRhdGFzZXRDb2RlIiwidHJhbnNsYXRpb25zIiwiZW4iLCJnYnIiLCJsb2NhbGl0eSIsInJlZ2lvbiIsInBvc3RhbF9jb2RlIiwidXNhIiwic2l6ZSIsIm1heFN1Z2dlc3Rpb25zIiwiYmFzZVVybCIsInNlYXJjaEVuZHBvaW50IiwibG9va3VwRW5kcG9pbnQiLCJ2YWxpZGF0ZUVuZHBvaW50IiwicHJvbXB0c2V0RW5kcG9pbnQiLCJzdGVwSW5FbmRwb2ludCIsInJlZmluZUVuZHBvaW50IiwiZW5yaWNobWVudEVuZHBvaW50IiwicG93ZXJlZEJ5TG9nbyIsImVsZW1lbnQiLCJjcmVhdGUiLCJwaWNrbGlzdCIsIml0ZW0iLCJzdmciLCJmb3JtYXQiLCJsaXN0SXRlbSIsImNyZWF0ZUxpc3RJdGVtIiwiY2xhc3NMaXN0IiwiYWRkIiwibGlzdCIsInBhcmVudE5vZGUiLCJhcHBlbmRDaGlsZCIsImRlc3Ryb3kiLCJyZW1vdmVDaGlsZCIsInVuZGVmaW5lZCIsInJlc3VsdCIsImxhc3RBZGRyZXNzRmllbGQiLCJnZW5lcmF0ZUFkZHJlc3NMaW5lUmVxdWlyZWQiLCJzaG93IiwibGFzdFNlYXJjaFRlcm0iLCJhZGRyZXNzIiwiY29uZmlkZW5jZSIsImlucHV0cyIsImNhbGN1bGF0ZUlmQWRkcmVzc0xpbmVHZW5lcmF0aW9uUmVxdWlyZWQiLCJlbGVtZW50cyIsImNyZWF0ZUZvcm1hdHRlZEFkZHJlc3NDb250YWluZXIiLCJPYmplY3QiLCJrZXlzIiwiYWRkcmVzc0NvbXBvbmVudCIsInVwZGF0ZUFkZHJlc3NMaW5lIiwidG9nZ2xlU2VhcmNoSW5wdXRzIiwiaGFzU2VhcmNoSW5wdXRCZWVuUmVzZXQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJjcmVhdGVTZWFyY2hBZ2FpbkxpbmsiLCJsaW5rIiwiY3JlYXRlQWRkcmVzc0xpbmUiLCJjbGFzc05hbWUiLCJkaXYiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJsYWJlbCIsImlubmVySFRNTCIsInJlcGxhY2UiLCJzdHIiLCJ0b1VwcGVyQ2FzZSIsInNldEF0dHJpYnV0ZSIsInRvTG93ZXJDYXNlIiwiY3VycmVudENvdW50cnlDb2RlIiwidHJhbnNsYXRlZExhYmVsIiwiY29udGFpbmVyIiwicG9zaXRpb24iLCJTSU5HTEVMSU5FIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJjcmVhdGVIZWFkaW5nIiwiaGVhZGluZyIsInVwZGF0ZUhlYWRpbmciLCJxdWVyeVNlbGVjdG9yIiwiYWRkcmVzc0xpbmVPYmplY3QiLCJhZGRyZXNzRmllbGQiLCJ1cGRhdGVMYWJlbCIsIm5vZGVOYW1lIiwiaW5uZXJUZXh0IiwiZmllbGQiLCJsYWJlbHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImh0bWxGb3IiLCJhZGRFdmVudExpc3RlbmVyIiwiZ2xvYmFsUmVzZXQiLCJiaW5kIiwicmVuZGVySW5wdXRMaXN0IiwiaW5wdXRBcnJheSIsImhhbmRsZVZhbGlkYXRlUmVzcG9uc2UiLCJyZXNwb25zZSIsInN1Z2dlc3Rpb25zIiwiaGFuZGxlRW1wdHlQaWNrbGlzdCIsInNwaW5uZXJDb250YWluZXIiLCJzcGlubmVyIiwibWVyZ2VEZWZhdWx0T3B0aW9ucyIsInNldHVwIiwic2V0VG9rZW4iLCJzZXRTZWFyY2hUeXBlIiwic2V0SW5wdXRzIiwiZ2V0RW5yaWNobWVudERhdGEiLCJnbG9iYWxBZGRyZXNzS2V5IiwiY291bnRyeV9pc28iLCJnbG9iYWxfYWRkcmVzc19rZXkiLCJhdHRyaWJ1dGVzIiwiZ2VvY29kZXMiLCJ3aGF0M3dvcmRzIiwicmVxdWVzdCIsImhhbmRsZUVucmljaG1lbnRSZXN1bHQiLCJzdHJpbmdpZnkiLCJzZXRDb3VudHJ5TGlzdCIsImNyZWF0ZVBpY2tsaXN0Iiwic2V0VGltZW91dCIsImdldFBhcmFtZXRlciIsIm5hbWUiLCJyZXN1bHRzIiwiUmVnRXhwIiwiZXhlYyIsImxvY2F0aW9uIiwic2VhcmNoIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiY3VzdG9tT3B0aW9ucyIsImVuYWJsZWQiLCJnZXRQcm9tcHRzZXQiLCJjdXJyZW50RGF0YVNldCIsImxvb2t1cERhdGFzZXRDb2RlIiwiaGFuZGxlUHJvbXB0c2V0UmVzdWx0IiwibGluZXMiLCJleGFtcGxlIiwicHJvbXB0Iiwic3VnZ2VzdGVkX2lucHV0X2xlbmd0aCIsIlZBTElEQVRFIiwiZGF0YXNldHMiLCJBcnJheSIsImlzQXJyYXkiLCJzZWFyY2hfdHlwZSIsInByb21wdF9zZXQiLCJmaW5kIiwiZGF0YXNldCIsImluY2x1ZGVzIiwicmVnaXN0ZXJJbnB1dHMiLCJsb29rdXBCdXR0b24iLCJsb29rdXBGbiIsImZyb20iLCJrZXlVcEZuIiwiY2hlY2tUYWJGbiIsImNoZWNrVGFiIiwiaGFuZGxlS2V5Ym9hcmRFdmVudCIsImNvdW50cnlDb2RlTWFwcGluZyIsImZvY3VzIiwiY291bnRyeUxpc3QiLCJoYW5kbGVDb3VudHJ5TGlzdENoYW5nZSIsImNvdW50cnlDb2RlIiwiRXJyb3IiLCJnZW5lcmF0ZVNlYXJjaERhdGFGb3JBcGlDYWxsIiwiY29tcG9uZW50cyIsInVuc3BlY2lmaWVkIiwiY3VycmVudFNlYXJjaFRlcm0iLCJtYXhfc3VnZ2VzdGlvbnMiLCJWYWx1ZSIsImdlbmVyYXRlTG9va3VwRGF0YUZvckFwaUNhbGwiLCJsb29rdXBLZXl3b3JkIiwidHlwZSIsImdldFdoYXQzV29yZHNMb29rdXBWYWx1ZSIsInNob3VsZEdldFN1Z2dlc3Rpb25zIiwic3RhcnRzV2l0aCIsInNsaWNlIiwicHJldmVudERlZmF1bHQiLCJnZXRLZXkiLCJrZXl1cCIsImNvdW50cnlDb2RlQW5kRGF0YXNldCIsInNwbGl0IiwiZGVsaW1pdGVyIiwiaXNJbnRlcm5hdGlvbmFsVmFsaWRhdGlvbiIsIm1hcCIsImpvaW4iLCJjYW5TZWFyY2giLCJhYm9ydCIsInJlZ2V4IiwidGVzdCIsInRyaW0iLCJXSEFUM1dPUkRTIiwiVURQUk4iLCJzaG93V2hhdDNXb3JkcyIsInNob3dMb29rdXAiLCJQaWNrbGlzdCIsInRhYkNvdW50IiwiaXRlbXMiLCJoYW5kbGVDb21tb25TaG93UGlja2xpc3RMb2dpYyIsInJlZmluZSIsImlzTmVlZGVkIiwiY3JlYXRlSW5wdXQiLCJzdWdnZXN0aW9uc19wcm9tcHQiLCJzdWdnZXN0aW9uc19rZXkiLCJkaXNwbGF5U3VnZ2VzdGlvbnNIZWFkZXIiLCJsaXN0ZW4iLCJkaXNwbGF5VXNlQWRkcmVzc0VudGVyZWRGb290ZXIiLCJzY3JvbGxJbnRvVmlld0lmTmVlZGVkIiwid2hhdDN3b3Jkc0l0ZW1zIiwiY3JlYXRlV2hhdDNXb3Jkc0xpc3RJdGVtIiwibG9va3VwSXRlbXMiLCJhZGRyZXNzZXMiLCJjcmVhdGVMb29rdXBMaXN0SXRlbSIsImN1cnJlbnRJdGVtIiwicmVzZXRUYWJDb3VudCIsImNyZWF0ZUxpc3QiLCJ1c2VBZGRyZXNzRW50ZXJlZCIsInJlbW92ZSIsImhhbmRsZUVtcHR5UGlja2xpc3RDYWxsYmFjayIsInRpdGxlRGl2IiwiY29udGFpbmVyRGl2IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiaXRlbURpdiIsImNsaWNrIiwib3V0T2ZCb3VuZHNUb3AiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJvdXRPZkJvdW5kc0JvdHRvbSIsImJvdHRvbSIsIndpbmRvdyIsImlubmVySGVpZ2h0Iiwic2Nyb2xsSW50b1ZpZXciLCJmaXJzdENoaWxkIiwiaW5wdXREYXRhIiwiYWRkcmVzc19saW5lXzEiLCJhZGRyZXNzX2xpbmVfMiIsImFkZHJlc3NfbGluZV8zIiwiZm9ybWF0TWFudWFsQWRkcmVzc0xpbmUiLCJsaW5lT2JqZWN0IiwiY2hlY2tFbnRlciIsInJvdyIsImFkZE1hdGNoaW5nRW1waGFzaXMiLCJkZXNjcmlwdGlvbiIsImVudGVyIiwiYnV0dG9uIiwiS2V5Ym9hcmRFdmVudCIsIk1vdXNlRXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJyZWZpbmVtZW50IiwiZ2V0QXR0cmlidXRlIiwiZmlyc3RBZGRyZXNzIiwibGFzdEFkZHJlc3MiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY3VycmVudGx5SGlnaGxpZ2h0ZWQiLCJwcmV2aW91c2x5SGlnaGxpZ2h0ZWQiLCJhZGRyZXNzTGlzdENvb3JkcyIsIm9mZnNldFRvcCIsIm9mZnNldEhlaWdodCIsInNjcm9sbFRvcCIsImhpZ2hsaWdodHMiLCJtYXRjaGVkIiwicmVwbGFjZW1lbnQiLCJzdWJzdHJpbmciLCJwaWNrIiwicGlja2xpc3RJdGVtIiwiY29udGFpbnMiLCJsb29rdXAiLCJsb29rdXBWMlJlcXVlc3QiLCJzdGF0ZSIsIm1vZGlmaWVyIiwiZW5kc1dpdGgiLCJBZGRyZXNzVmFsaWRhdGlvbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +!function(){"use strict";var e,o,t=function(){function e(){this.collection={}}return e.prototype.on=function(e,o){this.collection[e]=this.collection[e]||[],this.collection[e].push(o)},e.prototype.trigger=function(e,o){if(this.collection[e])for(var t=0;t=200&&a.currentRequest.status<400){var o=JSON.parse(a.currentRequest.responseText);t(o)}else a.instance.searchSpinner.hide(),a.instance.events.trigger("request-error",e),a.instance.events.trigger("request-error-".concat(a.currentRequest.status),e)},this.currentRequest.onerror=function(e){a.instance.searchSpinner.hide(),a.instance.events.trigger("request-error",e)},this.currentRequest.ontimeout=function(e){a.instance.searchSpinner.hide(),a.instance.events.trigger("request-timeout",e)},this.currentRequest.send(s)},e}();!function(e){e.AUTOCOMPLETE="autocomplete",e.SINGLELINE="singleline",e.VALIDATE="validate",e.LOOKUPV2="lookupv2"}(e||(e={})),function(e){e[e.SEARCH=1]="SEARCH",e[e.WHAT3WORDS=2]="WHAT3WORDS",e[e.UDPRN=3]="UDPRN",e[e.LOOKUPV2=4]="LOOKUPV2"}(o||(o={}));var a,d={LOCALITY:{key:"locality",display:"Locality"},POSTAL_CODE:{key:"postal_code",display:"Postal code"},UDPRN:{key:"udprn",display:"UDPRN"},WHAT3WORDS:{key:"what3words",display:"what3words"}},r={TRUE:{key:"true",display:"True"},FALSE:{key:"false",display:"False"}};!function(e){e.NO_MATCHES="No matches",e.VERIFIED_MATCH="Verified match",e.INTERACTION_REQUIRED="Interaction required",e.PREMISES_PARTIAL="Premises partial",e.STREET_PARTIAL="Street partial",e.MULTIPLE_MATCHES="Multiple matches"}(a||(a={}));var n={avMode:o.SEARCH,searchType:e.AUTOCOMPLETE,input:{placeholderText:"Start typing an address...",applyFocus:!1},formattedAddressContainer:{showHeading:!1,headingType:"h3",validatedHeadingText:"Validated address",manualHeadingText:"Manual address entered"},searchAgain:{visible:!0,text:"Search again"},useAddressEnteredText:" - Use address entered or try again...",useSpinner:!1,language:"en",addressLineLabels:["address_line_1","address_line_2","address_line_3","locality","region","postal_code","country"]},l=[{country:"Afghanistan",iso3Code:"AFG",iso2Code:"AF",datasetCode:"af-address-ed",searchType:"singleline, validate"},{country:"Afghanistan",iso3Code:"AFG",iso2Code:"AF",datasetCode:"af-address-eh",searchType:"autocomplete, lookupv2"},{country:"Albania",iso3Code:"ALB",iso2Code:"AL",datasetCode:"al-address-ed",searchType:"singleline, validate"},{country:"Albania",iso3Code:"ALB",iso2Code:"AL",datasetCode:"al-address-eh",searchType:"autocomplete, lookupv2"},{country:"Algeria",iso3Code:"DZA",iso2Code:"DZ",datasetCode:"dz-address-ed",searchType:"singleline, validate"},{country:"Algeria",iso3Code:"DZA",iso2Code:"DZ",datasetCode:"dz-address-eh",searchType:"autocomplete, lookupv2"},{country:"American Samoa",iso3Code:"ASM",iso2Code:"AS",datasetCode:"as-address-eh",searchType:"autocomplete, lookupv2"},{country:"Andorra",iso3Code:"AND",iso2Code:"AD",datasetCode:"ad-address-ed",searchType:"singleline, validate"},{country:"Andorra",iso3Code:"AND",iso2Code:"AD",datasetCode:"ad-address-eh",searchType:"autocomplete, lookupv2"},{country:"Angola",iso3Code:"AGO",iso2Code:"AO",datasetCode:"ao-address-ed",searchType:"singleline, validate"},{country:"Angola",iso3Code:"AGO",iso2Code:"AO",datasetCode:"ao-address-eh",searchType:"autocomplete, lookupv2"},{country:"Anguilla",iso3Code:"AIA",iso2Code:"AI",datasetCode:"ai-address-eh",searchType:"autocomplete, lookupv2"},{country:"Antarctica",iso3Code:"ATA",iso2Code:"AQ",datasetCode:"aq-address-ed",searchType:"singleline, validate"},{country:"Antigua and Barbuda",iso3Code:"ATG",iso2Code:"AG",datasetCode:"ag-address-ed",searchType:"singleline, validate"},{country:"Antigua and Barbuda",iso3Code:"ATG",iso2Code:"AG",datasetCode:"ag-address-eh",searchType:"autocomplete, lookupv2"},{country:"Argentina",iso3Code:"ARG",iso2Code:"AR",datasetCode:"ar-address-ed",searchType:"singleline, validate"},{country:"Argentina",iso3Code:"ARG",iso2Code:"AR",datasetCode:"ar-address-eh",searchType:"autocomplete, lookupv2"},{country:"Armenia",iso3Code:"ARM",iso2Code:"AM",datasetCode:"am-address-ed",searchType:"singleline, validate"},{country:"Armenia",iso3Code:"ARM",iso2Code:"AM",datasetCode:"am-address-eh",searchType:"autocomplete, lookupv2"},{country:"Aruba",iso3Code:"ABW",iso2Code:"AW",datasetCode:"aw-address-ed",searchType:"singleline, validate"},{country:"Aruba",iso3Code:"ABW",iso2Code:"AW",datasetCode:"aw-address-eh",searchType:"autocomplete, lookupv2"},{country:"Australia DataFusion",iso3Code:"AUS",iso2Code:"AU",datasetCode:"au-address-datafusion",searchType:"autocomplete, singleline, typedown, lookupv2"},{country:"Australia Geocoded National Address",iso3Code:"AUS",iso2Code:"AU",datasetCode:"au-address-gnaf",searchType:"autocomplete, singleline, typedown, validate, lookupv2"},{country:"Australia Postal Address",iso3Code:"AUS",iso2Code:"AU",datasetCode:"au-address",searchType:"autocomplete, singleline, typedown, validate, lookupv2"},{country:"Austria",iso3Code:"AUT",iso2Code:"AT",datasetCode:"at-address-eh",searchType:"autocomplete, lookupv2"},{country:"Austria",iso3Code:"AUT",iso2Code:"AT",datasetCode:"az-address-ed",searchType:"singleline, validate"},{country:"Azerbaijan",iso3Code:"AZE",iso2Code:"AZ",datasetCode:"az-address-ed",searchType:"singleline, validate"},{country:"Azerbaijan",iso3Code:"AZE",iso2Code:"AZ",datasetCode:"az-address-eh",searchType:"autocomplete, lookupv2"},{country:"Bahamas",iso3Code:"BHS",iso2Code:"BS",datasetCode:"bs-address-ed",searchType:"singleline, validate"},{country:"Bahamas",iso3Code:"BHS",iso2Code:"BS",datasetCode:"bs-address-eh",searchType:"autocomplete, lookupv2"},{country:"Bahrain",iso3Code:"BHR",iso2Code:"BH",datasetCode:"bh-address-ed",searchType:"singleline, validate"},{country:"Bahrain",iso3Code:"BHR",iso2Code:"BH",datasetCode:"bh-address-eh",searchType:"autocomplete, lookupv2"},{country:"Bangladesh",iso3Code:"BGD",iso2Code:"BD",datasetCode:"bd-address-ed",searchType:"singleline, validate"},{country:"Bangladesh",iso3Code:"BGD",iso2Code:"BD",datasetCode:"bd-address-eh",searchType:"autocomplete, lookupv2"},{country:"Barbados",iso3Code:"BRB",iso2Code:"BB",datasetCode:"bb-address-ed",searchType:"singleline, validate"},{country:"Barbados",iso3Code:"BRB",iso2Code:"BB",datasetCode:"bb-address-eh",searchType:"autocomplete, lookupv2"},{country:"Belarus",iso3Code:"BLR",iso2Code:"BY",datasetCode:"by-address-ed",searchType:"singleline, validate"},{country:"Belarus",iso3Code:"BLR",iso2Code:"BY",datasetCode:"by-address-eh",searchType:"autocomplete, lookupv2"},{country:"Belgium",iso3Code:"BEL",iso2Code:"BE",datasetCode:"be-address",searchType:"singleline, typedown"},{country:"Belgium",iso3Code:"BEL",iso2Code:"BE",datasetCode:"be-address-ed",searchType:" validate"},{country:"Belgium",iso3Code:"BEL",iso2Code:"BE",datasetCode:"be-address-eh",searchType:"autocomplete, lookupv2"},{country:"Belize",iso3Code:"BLZ",iso2Code:"BZ",datasetCode:"bz-address-ed",searchType:"singleline, validate"},{country:"Belize",iso3Code:"BLZ",iso2Code:"BZ",datasetCode:"bz-address-eh",searchType:"autocomplete, lookupv2"},{country:"Benin",iso3Code:"BEN",iso2Code:"BJ",datasetCode:"bj-address-ed",searchType:"singleline, validate"},{country:"Benin",iso3Code:"BEN",iso2Code:"BJ",datasetCode:"bj-address-eh",searchType:"autocomplete, lookupv2"},{country:"Bermuda",iso3Code:"BMU",iso2Code:"BM",datasetCode:"bm-address-ed",searchType:"singleline, validate"},{country:"Bermuda",iso3Code:"BMU",iso2Code:"BM",datasetCode:"bm-address-eh",searchType:"autocomplete, lookupv2"},{country:"Bhutan",iso3Code:"BTN",iso2Code:"BT",datasetCode:"bt-address-ed",searchType:"singleline, validate"},{country:"Bhutan",iso3Code:"BTN",iso2Code:"BT",datasetCode:"bt-address-eh",searchType:"autocomplete, lookupv2"},{country:"Bolivia",iso3Code:"BOL",iso2Code:"BO",datasetCode:"bo-address-ed",searchType:"singleline, validate"},{country:"Bolivia",iso3Code:"BOL",iso2Code:"BO",datasetCode:"bo-address-eh",searchType:"autocomplete, lookupv2"},{country:"Bonaire, Sint Eustatius and Saba",iso3Code:"BES",iso2Code:"BQ",datasetCode:"bq-address-ed",searchType:"singleline, validate"},{country:"Bonaire, Sint Eustatius and Saba",iso3Code:"BES",iso2Code:"BQ",datasetCode:"bq-address-eh",searchType:"autocomplete, lookupv2"},{country:"Bosnia and Herzegovina",iso3Code:"BIH",iso2Code:"BA",datasetCode:"ba-address-ed",searchType:"singleline, validate"},{country:"Bosnia and Herzegovina",iso3Code:"BIH",iso2Code:"BA",datasetCode:"ba-address-eh",searchType:"autocomplete, lookupv2"},{country:"Botswana",iso3Code:"BWA",iso2Code:"BW",datasetCode:"bw-address-ed",searchType:"singleline, validate"},{country:"Botswana",iso3Code:"BWA",iso2Code:"BW",datasetCode:"bw-address-eh",searchType:"autocomplete, lookupv2"},{country:"Brazil",iso3Code:"BRA",iso2Code:"BR",datasetCode:"br-address-ed",searchType:"singleline, validate"},{country:"Brazil",iso3Code:"BRA",iso2Code:"BR",datasetCode:"br-address-eh",searchType:"autocomplete, lookupv2"},{country:"Brunei Darussalam",iso3Code:"BRN",iso2Code:"BN",datasetCode:"bn-address-ed",searchType:"singleline, validate"},{country:"Brunei Darussalam",iso3Code:"BRN",iso2Code:"BN",datasetCode:"bn-address-eh",searchType:"autocomplete, lookupv2"},{country:"Bulgaria",iso3Code:"BGR",iso2Code:"BG",datasetCode:"bg-address-ed",searchType:"singleline, validate"},{country:"Bulgaria",iso3Code:"BGR",iso2Code:"BG",datasetCode:"bg-address-eh",searchType:"autocomplete, lookupv2"},{country:"Burkina Faso",iso3Code:"BFA",iso2Code:"BF",datasetCode:"bf-address-ed",searchType:"singleline, validate"},{country:"Burkina Faso",iso3Code:"BFA",iso2Code:"BF",datasetCode:"bf-address-eh",searchType:"autocomplete, lookupv2"},{country:"Burundi",iso3Code:"BDI",iso2Code:"BI",datasetCode:"bi-address-eh",searchType:"autocomplete, lookupv2"},{country:"Cambodia",iso3Code:"KHM",iso2Code:"KH",datasetCode:"kh-address-ed",searchType:"singleline, validate"},{country:"Cambodia",iso3Code:"KHM",iso2Code:"KH",datasetCode:"kh-address-eh",searchType:"autocomplete, lookupv2"},{country:"Cameroon",iso3Code:"CMR",iso2Code:"CM",datasetCode:"cm-address-ed",searchType:"singleline, validate"},{country:"Cameroon",iso3Code:"CMR",iso2Code:"CM",datasetCode:"cm-address-eh",searchType:"autocomplete, lookupv2"},{country:"Canada",iso3Code:"CAN",iso2Code:"CA",datasetCode:"ca-address",searchType:"autocomplete, singleline, typedown, validate, lookupv2"},{country:"Cape Verde",iso3Code:"CPV",iso2Code:"CV",datasetCode:"cv-address-ed",searchType:"singleline, validate"},{country:"Cape Verde",iso3Code:"CPV",iso2Code:"CV",datasetCode:"cv-address-eh",searchType:"autocomplete, lookupv2"},{country:"Cayman Islands",iso3Code:"CYM",iso2Code:"KY",datasetCode:"ky-address-ed",searchType:"singleline, validate"},{country:"Cayman Islands",iso3Code:"CYM",iso2Code:"KY",datasetCode:"ky-address-eh",searchType:"autocomplete, lookupv2"},{country:"Central African Republic",iso3Code:"CAF",iso2Code:"CF",datasetCode:"cf-address-ed",searchType:"singleline, validate"},{country:"Central African Republic",iso3Code:"CAF",iso2Code:"CF",datasetCode:"cf-address-eh",searchType:"autocomplete, lookupv2"},{country:"Chad",iso3Code:"TCD",iso2Code:"TD",datasetCode:"td-address-ed",searchType:"singleline, validate"},{country:"Chad",iso3Code:"TCD",iso2Code:"TD",datasetCode:"td-address-eh",searchType:"autocomplete, lookupv2"},{country:"Chile",iso3Code:"CHL",iso2Code:"CL",datasetCode:"cl-address-ed",searchType:"singleline, validate"},{country:"Chile",iso3Code:"CHL",iso2Code:"CL",datasetCode:"cl-address-eh",searchType:"autocomplete, lookupv2"},{country:"China",iso3Code:"CHN",iso2Code:"CN",datasetCode:"cn-address-ed",searchType:"singleline, validate"},{country:"China",iso3Code:"CHN",iso2Code:"CN",datasetCode:"cn-address-eh",searchType:"autocomplete, lookupv2"},{country:"Christmas Island",iso3Code:"CXR",iso2Code:"CX",datasetCode:"cx-address-eh",searchType:"autocomplete, lookupv2"},{country:"Cocos Island",iso3Code:"CCK",iso2Code:"CC",datasetCode:"cc-address-eh",searchType:"autocomplete, lookupv2"},{country:"Colombia",iso3Code:"COL",iso2Code:"CO",datasetCode:"co-address-ed",searchType:"singleline, validate"},{country:"Colombia",iso3Code:"COL",iso2Code:"CO",datasetCode:"co-address-eh",searchType:"autocomplete, lookupv2"},{country:"Comoros",iso3Code:"COM",iso2Code:"KM",datasetCode:"km-address-ed",searchType:"singleline, validate"},{country:"Comoros",iso3Code:"COM",iso2Code:"KM",datasetCode:"km-address-eh",searchType:"autocomplete, lookupv2"},{country:"Congo",iso3Code:"COG",iso2Code:"CG",datasetCode:"cg-address-ed",searchType:"singleline, validate"},{country:"Congo",iso3Code:"COG",iso2Code:"CG",datasetCode:"cg-address-eh",searchType:"autocomplete, lookupv2"},{country:"Congo, The Democratic Republic of the",iso3Code:"COD",iso2Code:"CD",datasetCode:"cd-address-ed",searchType:"singleline, validate"},{country:"Congo, The Democratic Republic of the",iso3Code:"COD",iso2Code:"CD",datasetCode:"cd-address-eh",searchType:"autocomplete, lookupv2"},{country:"Cook Islands",iso3Code:"COK",iso2Code:"CK",datasetCode:"ck-address-ed",searchType:"singleline, validate"},{country:"Cook Islands",iso3Code:"COK",iso2Code:"CK",datasetCode:"ck-address-eh",searchType:"autocomplete, lookupv2"},{country:"Costa Rica",iso3Code:"CRI",iso2Code:"CR",datasetCode:"cr-address-ed",searchType:"singleline, validate"},{country:"Costa Rica",iso3Code:"CRI",iso2Code:"CR",datasetCode:"cr-address-eh",searchType:"autocomplete, lookupv2"},{country:"Croatia",iso3Code:"HRV",iso2Code:"HR",datasetCode:"hr-address-ed",searchType:"singleline, validate"},{country:"Croatia",iso3Code:"HRV",iso2Code:"HR",datasetCode:"hr-address-eh",searchType:"autocomplete, lookupv2"},{country:"Cuba",iso3Code:"CUB",iso2Code:"CU",datasetCode:"cu-address-ed",searchType:"singleline, validate"},{country:"Cuba",iso3Code:"CUB",iso2Code:"CU",datasetCode:"cu-address-eh",searchType:"autocomplete, lookupv2"},{country:"Curaçao",iso3Code:"CUW",iso2Code:"CW",datasetCode:"cw-address-ed",searchType:"singleline, validate"},{country:"Curaçao",iso3Code:"CUW",iso2Code:"CW",datasetCode:"cw-address-eh",searchType:"autocomplete, lookupv2"},{country:"Cyprus",iso3Code:"CYP",iso2Code:"CY",datasetCode:"cy-address-ed",searchType:"singleline, validate"},{country:"Cyprus",iso3Code:"CYP",iso2Code:"CY",datasetCode:"cy-address-eh",searchType:"autocomplete, lookupv2"},{country:"Czech Republic",iso3Code:"CZE",iso2Code:"CZ",datasetCode:"cz-address-ed",searchType:"singleline, validate"},{country:"Czech Republic",iso3Code:"CZE",iso2Code:"CZ",datasetCode:"cz-address-eh",searchType:"autocomplete, lookupv2"},{country:"Côte d'Ivoire",iso3Code:"CIV",iso2Code:"CI",datasetCode:"ci-address-ed",searchType:"singleline, validate"},{country:"Côte d'Ivoire",iso3Code:"CIV",iso2Code:"CI",datasetCode:"ci-address-eh",searchType:"autocomplete, lookupv2"},{country:"Denmark",iso3Code:"DNK",iso2Code:"DK",datasetCode:"dk-address",searchType:"singleline, typedown, validate"},{country:"Denmark",iso3Code:"DNK",iso2Code:"DK",datasetCode:"dk-address-eh",searchType:"autocomplete, lookupv2"},{country:"Djibouti",iso3Code:"DJI",iso2Code:"DJ",datasetCode:"dj-address-ed",searchType:"singleline, validate"},{country:"Djibouti",iso3Code:"DJI",iso2Code:"DJ",datasetCode:"dj-address-eh",searchType:"autocomplete, lookupv2"},{country:"Dominica",iso3Code:"DMA",iso2Code:"DM",datasetCode:"dm-address-ed",searchType:"singleline, validate"},{country:"Dominica",iso3Code:"DMA",iso2Code:"DM",datasetCode:"dm-address-eh",searchType:"autocomplete, lookupv2"},{country:"Dominican Republic",iso3Code:"DOM",iso2Code:"DO",datasetCode:"do-address-ed",searchType:"singleline, validate"},{country:"Dominican Republic",iso3Code:"DOM",iso2Code:"DO",datasetCode:"do-address-eh",searchType:"autocomplete, lookupv2"},{country:"Ecuador",iso3Code:"ECU",iso2Code:"EC",datasetCode:"ec-address-ed",searchType:"singleline, validate"},{country:"Ecuador",iso3Code:"ECU",iso2Code:"EC",datasetCode:"ec-address-eh",searchType:"autocomplete, lookupv2"},{country:"Egypt",iso3Code:"EGY",iso2Code:"EG",datasetCode:"eg-address-ed",searchType:"singleline, validate"},{country:"Egypt",iso3Code:"EGY",iso2Code:"EG",datasetCode:"eg-address-eh",searchType:"autocomplete, lookupv2"},{country:"El Salvador",iso3Code:"SLV",iso2Code:"SV",datasetCode:"sv-address-ed",searchType:"singleline, validate"},{country:"El Salvador",iso3Code:"SLV",iso2Code:"SV",datasetCode:"sv-address-eh",searchType:"autocomplete, lookupv2"},{country:"Equatorial Guinea",iso3Code:"GNQ",iso2Code:"GQ",datasetCode:"gq-address-ed",searchType:"singleline, validate"},{country:"Equatorial Guinea",iso3Code:"GNQ",iso2Code:"GQ",datasetCode:"gq-address-eh",searchType:"autocomplete, lookupv2"},{country:"Eritrea",iso3Code:"ERI",iso2Code:"ER",datasetCode:"er-address-ed",searchType:"singleline, validate"},{country:"Eritrea",iso3Code:"ERI",iso2Code:"ER",datasetCode:"er-address-eh",searchType:"autocomplete, lookupv2"},{country:"Estonia",iso3Code:"EST",iso2Code:"EE",datasetCode:"ee-address-ed",searchType:"singleline, validate"},{country:"Estonia",iso3Code:"EST",iso2Code:"EE",datasetCode:"ee-address-eh",searchType:"autocomplete, lookupv2"},{country:"Ethiopia",iso3Code:"ETH",iso2Code:"ET",datasetCode:"et-address-ed",searchType:"singleline, validate"},{country:"Ethiopia",iso3Code:"ETH",iso2Code:"ET",datasetCode:"et-address-eh",searchType:"autocomplete, lookupv2"},{country:"Falkland Islands (Malvinas)",iso3Code:"FLK",iso2Code:"FK",datasetCode:"fk-address-eh",searchType:"autocomplete, lookupv2"},{country:"Faroe Islands",iso3Code:"FRO",iso2Code:"FO",datasetCode:"fo-address-ed",searchType:"singleline, validate"},{country:"Faroe Islands",iso3Code:"FRO",iso2Code:"FO",datasetCode:"fo-address-eh",searchType:"autocomplete, lookupv2"},{country:"Fiji",iso3Code:"FJI",iso2Code:"FJ",datasetCode:"fj-address-ed",searchType:"singleline, validate"},{country:"Fiji",iso3Code:"FJI",iso2Code:"FJ",datasetCode:"fj-address-eh",searchType:"autocomplete, lookupv2"},{country:"Finland",iso3Code:"FIN",iso2Code:"FI",datasetCode:"fi-address",searchType:"singleline, typedown"},{country:"Finland",iso3Code:"FIN",iso2Code:"FI",datasetCode:"fi-address-ed",searchType:"validate"},{country:"Finland",iso3Code:"FIN",iso2Code:"FI",datasetCode:"fi-address-eh",searchType:"autocomplete, lookupv2"},{country:"France Street Level",iso3Code:"FRA",iso2Code:"FR",datasetCode:"fr-address-streetlevel",searchType:"singleline, typedown, validate"},{country:"France Sub-Premises Level",iso3Code:"FRA",iso2Code:"FR",datasetCode:"fr-additional-hexaline3",searchType:"autocomplete, singleline, typedown"},{country:"France Premises Level",iso3Code:"FRA",iso2Code:"FR",datasetCode:"fr-address",searchType:"singleline, typedown, validate"},{country:"French Guiana",iso3Code:"GUF",iso2Code:"GF",datasetCode:"gf-address-eh",searchType:"autocomplete, lookupv2"},{country:"French Polynesia",iso3Code:"PYF",iso2Code:"PF",datasetCode:"pf-address-eh",searchType:"autocomplete, lookupv2"},{country:"Gabon",iso3Code:"GAB",iso2Code:"GA",datasetCode:"ga-address-ed",searchType:"singleline, validate"},{country:"Gabon",iso3Code:"GAB",iso2Code:"GA",datasetCode:"ga-address-eh",searchType:"autocomplete, lookupv2"},{country:"Gambia",iso3Code:"GMB",iso2Code:"GM",datasetCode:"gm-address-ed",searchType:"singleline, validate"},{country:"Gambia",iso3Code:"GMB",iso2Code:"GM",datasetCode:"gm-address-eh",searchType:"autocomplete, lookupv2"},{country:"Georgia",iso3Code:"GEO",iso2Code:"GE",datasetCode:"ge-address-ed",searchType:"singleline, validate"},{country:"Georgia",iso3Code:"GEO",iso2Code:"GE",datasetCode:"ge-address-eh",searchType:"autocomplete, lookupv2"},{country:"Germany",iso3Code:"DEU",iso2Code:"DE",datasetCode:"de-address",searchType:"singleline, typedown, validate"},{country:"Germany",iso3Code:"DEU",iso2Code:"DE",datasetCode:"de-address-ed",searchType:"validate"},{country:"Germany",iso3Code:"DEU",iso2Code:"DE",datasetCode:"de-address-eh",searchType:"autocomplete, lookupv2"},{country:"Ghana",iso3Code:"GHA",iso2Code:"GH",datasetCode:"gh-address-ed",searchType:"singleline, validate"},{country:"Ghana",iso3Code:"GHA",iso2Code:"GH",datasetCode:"gh-address-eh",searchType:"autocomplete, lookupv2"},{country:"Gibraltar",iso3Code:"GIB",iso2Code:"GI",datasetCode:"gi-address-eh",searchType:"autocomplete, lookupv2"},{country:"Greece",iso3Code:"GRC",iso2Code:"GR",datasetCode:"gr-address-ed",searchType:"singleline, validate"},{country:"Greece",iso3Code:"GRC",iso2Code:"GR",datasetCode:"gr-address-eh",searchType:"autocomplete, lookupv2"},{country:"Greenland",iso3Code:"GRL",iso2Code:"GL",datasetCode:"gl-address-ed",searchType:"singleline, validate"},{country:"Greenland",iso3Code:"GRL",iso2Code:"GL",datasetCode:"gl-address-eh",searchType:"autocomplete, lookupv2"},{country:"Grenada",iso3Code:"GRD",iso2Code:"GD",datasetCode:"gd-address-ed",searchType:"singleline, validate"},{country:"Grenada",iso3Code:"GRD",iso2Code:"GD",datasetCode:"gd-address-eh",searchType:"autocomplete, lookupv2"},{country:"Guadeloupe",iso3Code:"GLP",iso2Code:"GP",datasetCode:"gp-address-eh",searchType:"autocomplete, lookupv2"},{country:"Guam",iso3Code:"GUM",iso2Code:"GU",datasetCode:"gu-address-eh",searchType:"autocomplete, lookupv2"},{country:"Guatemala",iso3Code:"GTM",iso2Code:"GT",datasetCode:"gt-address-ed",searchType:"singleline, validate"},{country:"Guatemala",iso3Code:"GTM",iso2Code:"GT",datasetCode:"gt-address-eh",searchType:"autocomplete, lookupv2"},{country:"Guinea",iso3Code:"GIN",iso2Code:"GN",datasetCode:"gn-address-ed",searchType:"singleline, validate"},{country:"Guinea",iso3Code:"GIN",iso2Code:"GN",datasetCode:"gn-address-eh",searchType:"autocomplete, lookupv2"},{country:"Guinea-Bissau",iso3Code:"GNB",iso2Code:"GW",datasetCode:"gw-address-ed",searchType:"singleline, validate"},{country:"Guinea-Bissau",iso3Code:"GNB",iso2Code:"GW",datasetCode:"gw-address-eh",searchType:"autocomplete, lookupv2"},{country:"Guyana",iso3Code:"GUY",iso2Code:"GY",datasetCode:"gy-address-ed",searchType:"singleline, validate"},{country:"Guyana",iso3Code:"GUY",iso2Code:"GY",datasetCode:"gy-address-eh",searchType:"autocomplete, lookupv2"},{country:"Haiti",iso3Code:"HTI",iso2Code:"HT",datasetCode:"ht-address-ed",searchType:"singleline, validate"},{country:"Haiti",iso3Code:"HTI",iso2Code:"HT",datasetCode:"ht-address-eh",searchType:"autocomplete, lookupv2"},{country:"Honduras",iso3Code:"HND",iso2Code:"HN",datasetCode:"hn-address-ed",searchType:"singleline, validate"},{country:"Honduras",iso3Code:"HND",iso2Code:"HN",datasetCode:"hn-address-eh",searchType:"autocomplete, lookupv2"},{country:"Hong Kong",iso3Code:"HKG",iso2Code:"HK",datasetCode:"hk-address-ed",searchType:"singleline, validate"},{country:"Hong Kong",iso3Code:"HKG",iso2Code:"HK",datasetCode:"hk-address-eh",searchType:"autocomplete, lookupv2"},{country:"Hungary",iso3Code:"HUN",iso2Code:"HU",datasetCode:"hu-address-ed",searchType:"singleline, validate"},{country:"Hungary",iso3Code:"HUN",iso2Code:"HU",datasetCode:"hu-address-eh",searchType:"autocomplete, lookupv2"},{country:"Iceland",iso3Code:"ISL",iso2Code:"IS",datasetCode:"is-address-ed",searchType:"singleline, validate"},{country:"Iceland",iso3Code:"ISL",iso2Code:"IS",datasetCode:"is-address-eh",searchType:"autocomplete, lookupv2"},{country:"India",iso3Code:"IND",iso2Code:"IN",datasetCode:"in-address-ed",searchType:"singleline, validate"},{country:"India",iso3Code:"IND",iso2Code:"IN",datasetCode:"in-address-eh",searchType:"autocomplete, lookupv2"},{country:"Indonesia",iso3Code:"IDN",iso2Code:"ID",datasetCode:"id-address-ed",searchType:"singleline, validate"},{country:"Indonesia",iso3Code:"IDN",iso2Code:"ID",datasetCode:"id-address-eh",searchType:"autocomplete, lookupv2"},{country:"Iran, Islamic Republic of",iso3Code:"IRN",iso2Code:"IR",datasetCode:"ir-address-ed",searchType:"singleline, validate"},{country:"Iran, Islamic Republic of",iso3Code:"IRN",iso2Code:"IR",datasetCode:"ir-address-eh",searchType:"autocomplete, lookupv2"},{country:"Iraq",iso3Code:"IRQ",iso2Code:"IQ",datasetCode:"iq-address-ed",searchType:"singleline, validate"},{country:"Iraq",iso3Code:"IRQ",iso2Code:"IQ",datasetCode:"iq-address-eh",searchType:"autocomplete, lookupv2"},{country:"Ireland",iso3Code:"IRL",iso2Code:"IE",datasetCode:"ie-address",searchType:"singleline, typedown"},{country:"Ireland",iso3Code:"IRL",iso2Code:"IE",datasetCode:"ie-address-eh",searchType:"autocomplete, lookupv2"},{country:"Ireland Eircode",iso3Code:"IRL",iso2Code:"IE",datasetCode:"ie-additional-eircode",searchType:"autocomplete, lookupv2"},{country:"Ireland ECAD",iso3Code:"IRL",iso2Code:"IE",datasetCode:"ie-address-ecad",searchType:"autocomplete, lookupv2, singleline, typedown"},{country:"Israel",iso3Code:"ISR",iso2Code:"IL",datasetCode:"il-address-ed",searchType:"singleline, validate"},{country:"Israel",iso3Code:"ISR",iso2Code:"IL",datasetCode:"il-address-eh",searchType:"autocomplete, lookupv2"},{country:"Italy",iso3Code:"ITA",iso2Code:"IT",datasetCode:"it-address-ed",searchType:"singleline, validate"},{country:"Italy",iso3Code:"ITA",iso2Code:"IT",datasetCode:"it-address-eh",searchType:"autocomplete, lookupv2"},{country:"Jamaica",iso3Code:"JAM",iso2Code:"JM",datasetCode:"jm-address-ed",searchType:"singleline, validate"},{country:"Jamaica",iso3Code:"JAM",iso2Code:"JM",datasetCode:"jm-address-eh",searchType:"autocomplete, lookupv2"},{country:"Japan",iso3Code:"JPN",iso2Code:"JP",datasetCode:"jp-address-ed",searchType:"singleline, validate"},{country:"Japan",iso3Code:"JPN",iso2Code:"JP",datasetCode:"jp-address-eh",searchType:"autocomplete, lookupv2"},{country:"Jordan",iso3Code:"JOR",iso2Code:"JO",datasetCode:"jo-address-ed",searchType:"singleline, validate"},{country:"Jordan",iso3Code:"JOR",iso2Code:"JO",datasetCode:"jo-address-eh",searchType:"autocomplete, lookupv2"},{country:"Kazakhstan",iso3Code:"KAZ",iso2Code:"KZ",datasetCode:"kz-address-ed",searchType:"singleline, validate"},{country:"Kazakhstan",iso3Code:"KAZ",iso2Code:"KZ",datasetCode:"kz-address-eh",searchType:"autocomplete, lookupv2"},{country:"Kenya",iso3Code:"KEN",iso2Code:"KE",datasetCode:"ke-address-ed",searchType:"singleline, validate"},{country:"Kenya",iso3Code:"KEN",iso2Code:"KE",datasetCode:"ke-address-eh",searchType:"autocomplete, lookupv2"},{country:"Kiribati",iso3Code:"KIR",iso2Code:"KI",datasetCode:"ki-address-ed",searchType:"singleline, validate"},{country:"Kiribati",iso3Code:"KIR",iso2Code:"KI",datasetCode:"ki-address-eh",searchType:"autocomplete, lookupv2"},{country:"Korea, Democratic People's Republic of",iso3Code:"PRK",iso2Code:"KP",datasetCode:"kp-address-ed",searchType:"singleline, validate"},{country:"Korea, Democratic People's Republic of",iso3Code:"PRK",iso2Code:"KP",datasetCode:"kp-address-eh",searchType:"autocomplete, lookupv2"},{country:"Korea, Republic of",iso3Code:"KOR",iso2Code:"KR",datasetCode:"kr-address-ed",searchType:"singleline, validate"},{country:"Korea, Republic of",iso3Code:"KOR",iso2Code:"KR",datasetCode:"kr-address-eh",searchType:"autocomplete, lookupv2"},{country:"Kosovo",iso3Code:"KOS",iso2Code:"XK",datasetCode:"kv-address-eh",searchType:"autocomplete, lookupv2"},{country:"Kuwait",iso3Code:"KWT",iso2Code:"KW",datasetCode:"kw-address-ed",searchType:"singleline, validate"},{country:"Kuwait",iso3Code:"KWT",iso2Code:"KW",datasetCode:"kw-address-eh",searchType:"autocomplete, lookupv2"},{country:"Kyrgyzstan",iso3Code:"KGZ",iso2Code:"KG",datasetCode:"kg-address-ed",searchType:"singleline, validate"},{country:"Kyrgyzstan",iso3Code:"KGZ",iso2Code:"KG",datasetCode:"kg-address-eh",searchType:"autocomplete, lookupv2"},{country:"Laos",iso3Code:"LAO",iso2Code:"LA",datasetCode:"la-address-ed",searchType:"singleline, validate"},{country:"Laos",iso3Code:"LAO",iso2Code:"LA",datasetCode:"la-address-eh",searchType:"autocomplete, lookupv2"},{country:"Latvia",iso3Code:"LVA",iso2Code:"LV",datasetCode:"lv-address-ed",searchType:"singleline, validate"},{country:"Latvia",iso3Code:"LVA",iso2Code:"LV",datasetCode:"lv-address-eh",searchType:"autocomplete, lookupv2"},{country:"Lebanon",iso3Code:"LBN",iso2Code:"LB",datasetCode:"lb-address-ed",searchType:"singleline, validate"},{country:"Lebanon",iso3Code:"LBN",iso2Code:"LB",datasetCode:"lb-address-eh",searchType:"autocomplete, lookupv2"},{country:"Lesotho",iso3Code:"LSO",iso2Code:"LS",datasetCode:"ls-address-ed",searchType:"singleline, validate"},{country:"Lesotho",iso3Code:"LSO",iso2Code:"LS",datasetCode:"ls-address-eh",searchType:"autocomplete, lookupv2"},{country:"Liberia",iso3Code:"LBR",iso2Code:"LR",datasetCode:"lr-address-ed",searchType:"singleline, validate"},{country:"Liberia",iso3Code:"LBR",iso2Code:"LR",datasetCode:"lr-address-eh",searchType:"autocomplete, lookupv2"},{country:"Libya",iso3Code:"LBY",iso2Code:"LY",datasetCode:"ly-address-ed",searchType:"singleline, validate"},{country:"Libya",iso3Code:"LBY",iso2Code:"LY",datasetCode:"ly-address-eh",searchType:"autocomplete, lookupv2"},{country:"Liechtenstein",iso3Code:"LIE",iso2Code:"LI",datasetCode:"li-address-ed",searchType:"singleline, validate"},{country:"Liechtenstein",iso3Code:"LIE",iso2Code:"LI",datasetCode:"li-address-eh",searchType:"autocomplete, lookupv2"},{country:"Lithuania",iso3Code:"LTU",iso2Code:"LT",datasetCode:"lt-address-ed",searchType:"singleline, validate"},{country:"Lithuania",iso3Code:"LTU",iso2Code:"LT",datasetCode:"lt-address-eh",searchType:"autocomplete, lookupv2"},{country:"Luxembourg",iso3Code:"LUX",iso2Code:"LU",datasetCode:"lu-address",searchType:"singleline, typedown, validate"},{country:"Luxembourg",iso3Code:"LUX",iso2Code:"LU",datasetCode:"lu-address-eh",searchType:"autocomplete, lookupv2"},{country:"Macau",iso3Code:"MAC",iso2Code:"MO",datasetCode:"lv-address-ed",searchType:"singleline, validate"},{country:"Macau",iso3Code:"MAC",iso2Code:"MO",datasetCode:"lv-address-eh",searchType:"autocomplete, lookupv2"},{country:"Madagascar",iso3Code:"MDG",iso2Code:"MG",datasetCode:"mo-address-ed",searchType:"singleline, validate"},{country:"Madagascar",iso3Code:"MDG",iso2Code:"MG",datasetCode:"mo-address-eh",searchType:"autocomplete, lookupv2"},{country:"Malawi",iso3Code:"MWI",iso2Code:"MW",datasetCode:"mw-address-ed",searchType:"singleline, validate"},{country:"Malawi",iso3Code:"MWI",iso2Code:"MW",datasetCode:"mw-address-eh",searchType:"autocomplete, lookupv2"},{country:"Malaysia",iso3Code:"MYS",iso2Code:"MY",datasetCode:"my-address-ed",searchType:"singleline, validate"},{country:"Malaysia",iso3Code:"MYS",iso2Code:"MY",datasetCode:"my-address-eh",searchType:"autocomplete, lookupv2"},{country:"Maldives",iso3Code:"MDV",iso2Code:"MV",datasetCode:"mv-address-ed",searchType:"singleline, validate"},{country:"Maldives",iso3Code:"MDV",iso2Code:"MV",datasetCode:"mv-address-eh",searchType:"autocomplete, lookupv2"},{country:"Mali",iso3Code:"MLI",iso2Code:"ML",datasetCode:"ml-address-ed",searchType:"singleline, validate"},{country:"Mali",iso3Code:"MLI",iso2Code:"ML",datasetCode:"ml-address-eh",searchType:"autocomplete, lookupv2"},{country:"Malta",iso3Code:"MLT",iso2Code:"MT",datasetCode:"mt-address-ed",searchType:"singleline, validate"},{country:"Malta",iso3Code:"MLT",iso2Code:"MT",datasetCode:"mt-address-eh",searchType:"autocomplete, lookupv2"},{country:"Marshall Islands",iso3Code:"MHL",iso2Code:"MH",datasetCode:"mh-address-eh",searchType:"autocomplete, lookupv2"},{country:"Martinique",iso3Code:"MTQ",iso2Code:"MQ",datasetCode:"mq-address-eh",searchType:"autocomplete, lookupv2"},{country:"Mauritania",iso3Code:"MRT",iso2Code:"MR",datasetCode:"mr-address-ed",searchType:"singleline, validate"},{country:"Mauritania",iso3Code:"MRT",iso2Code:"MR",datasetCode:"mr-address-eh",searchType:"autocomplete, lookupv2"},{country:"Mauritius",iso3Code:"MUS",iso2Code:"MU",datasetCode:"mu-address-ed",searchType:"singleline, validate"},{country:"Mauritius",iso3Code:"MUS",iso2Code:"MU",datasetCode:"mu-address-eh",searchType:"autocomplete, lookupv2"},{country:"Mayotte",iso3Code:"MYT",iso2Code:"YT",datasetCode:"yt-address-eh",searchType:"autocomplete, lookupv2"},{country:"Mexico",iso3Code:"MEX",iso2Code:"MX",datasetCode:"mx-address-ed",searchType:"singleline, validate"},{country:"Mexico",iso3Code:"MEX",iso2Code:"MX",datasetCode:"mx-address-eh",searchType:"autocomplete, lookupv2"},{country:"Micronesia, Federated States of",iso3Code:"FSM",iso2Code:"FM",datasetCode:"fm-address-eh",searchType:"autocomplete, lookupv2"},{country:"Moldova",iso3Code:"MDA",iso2Code:"MD",datasetCode:"md-address-ed",searchType:"singleline, validate"},{country:"Moldova",iso3Code:"MDA",iso2Code:"MD",datasetCode:"md-address-eh",searchType:"autocomplete, lookupv2"},{country:"Monaco",iso3Code:"MCO",iso2Code:"MC",datasetCode:"mc-address-ed",searchType:"singleline, validate"},{country:"Monaco",iso3Code:"MCO",iso2Code:"MC",datasetCode:"mc-address-eh",searchType:"autocomplete, lookupv2"},{country:"Mongolia",iso3Code:"MNG",iso2Code:"MN",datasetCode:"mn-address-ed",searchType:"singleline, validate"},{country:"Mongolia",iso3Code:"MNG",iso2Code:"MN",datasetCode:"mn-address-eh",searchType:"autocomplete, lookupv2"},{country:"Montenegro",iso3Code:"MNE",iso2Code:"ME",datasetCode:"me-address-ed",searchType:"singleline, validate"},{country:"Montenegro",iso3Code:"MNE",iso2Code:"ME",datasetCode:"me-address-eh",searchType:"autocomplete, lookupv2"},{country:"Montserrat",iso3Code:"MSR",iso2Code:"MS",datasetCode:"ms-address-eh",searchType:"autocomplete, lookupv2"},{country:"Morocco",iso3Code:"MAR",iso2Code:"MA",datasetCode:"ma-address-ed",searchType:"singleline, validate"},{country:"Morocco",iso3Code:"MAR",iso2Code:"MA",datasetCode:"ma-address-eh",searchType:"autocomplete, lookupv2"},{country:"Mozambique",iso3Code:"MOZ",iso2Code:"MZ",datasetCode:"mz-address-ed",searchType:"singleline, validate"},{country:"Mozambique",iso3Code:"MOZ",iso2Code:"MZ",datasetCode:"mz-address-eh",searchType:"autocomplete, lookupv2"},{country:"Myanmar",iso3Code:"MMR",iso2Code:"MM",datasetCode:"mm-address-ed",searchType:"singleline, validate"},{country:"Myanmar",iso3Code:"MMR",iso2Code:"MM",datasetCode:"mm-address-eh",searchType:"autocomplete, lookupv2"},{country:"Namibia",iso3Code:"NAM",iso2Code:"NA",datasetCode:"na-address-ed",searchType:"singleline, validate"},{country:"Namibia",iso3Code:"NAM",iso2Code:"NA",datasetCode:"na-address-eh",searchType:"autocomplete, lookupv2"},{country:"Nauru",iso3Code:"NRU",iso2Code:"NR",datasetCode:"nr-address-ed",searchType:"singleline, validate"},{country:"Nauru",iso3Code:"NRU",iso2Code:"NR",datasetCode:"nr-address-eh",searchType:"autocomplete, lookupv2"},{country:"Nepal",iso3Code:"NPL",iso2Code:"NP",datasetCode:"np-address-ed",searchType:"singleline, validate"},{country:"Nepal",iso3Code:"NPL",iso2Code:"NP",datasetCode:"np-address-eh",searchType:"autocomplete, lookupv2"},{country:"Netherlands",iso3Code:"NLD",iso2Code:"NL",datasetCode:"nl-address",searchType:"singleline, typedown, validate"},{country:"Netherlands",iso3Code:"NLD",iso2Code:"NL",datasetCode:"nl-address-eh",searchType:"autocomplete, lookupv2"},{country:"New Caledonia",iso3Code:"NCL",iso2Code:"NC",datasetCode:"nc-address-eh",searchType:"autocomplete, lookupv2"},{country:"New Zealand DataFusion",iso3Code:"NZL",iso2Code:"NZ",datasetCode:"nz-additional-datafusion",searchType:"autocomplete, singleline, typedown, validate, lookupv2"},{country:"New Zealand Postal Address",iso3Code:"NZL",iso2Code:"NZ",datasetCode:"nz-address",searchType:"autocomplete, singleline, typedown, validate, lookupv2"},{country:"Nicaragua",iso3Code:"NIC",iso2Code:"NI",datasetCode:"ni-address-ed",searchType:"singleline, validate"},{country:"Nicaragua",iso3Code:"NIC",iso2Code:"NI",datasetCode:"ni-address-eh",searchType:"autocomplete, lookupv2"},{country:"Niger",iso3Code:"NER",iso2Code:"NE",datasetCode:"ne-address-ed",searchType:"singleline, validate"},{country:"Niger",iso3Code:"NER",iso2Code:"NE",datasetCode:"ne-address-eh",searchType:"autocomplete, lookupv2"},{country:"Nigeria",iso3Code:"NGA",iso2Code:"NG",datasetCode:"ng-address-ed",searchType:"singleline, validate"},{country:"Nigeria",iso3Code:"NGA",iso2Code:"NG",datasetCode:"ng-address-eh",searchType:"autocomplete, lookupv2"},{country:"Niue",iso3Code:"NIU",iso2Code:"NU",datasetCode:"nu-address-ed",searchType:"singleline, validate"},{country:"Niue",iso3Code:"NIU",iso2Code:"NU",datasetCode:"nu-address-eh",searchType:"autocomplete, lookupv2"},{country:"Norfolk Island",iso3Code:"NFK",iso2Code:"NF",datasetCode:"nf-address-ed",searchType:"singleline, validate"},{country:"Norfolk Island",iso3Code:"NFK",iso2Code:"NF",datasetCode:"nf-address-eh",searchType:"autocomplete, lookupv2"},{country:"North Macedonia",iso3Code:"MKD",iso2Code:"MK",datasetCode:"mk-address-ed",searchType:"singleline, validate"},{country:"North Macedonia",iso3Code:"MKD",iso2Code:"MK",datasetCode:"mk-address-eh",searchType:"autocomplete, lookupv2"},{country:"Northern Mariana Islands",iso3Code:"MNP",iso2Code:"MP",datasetCode:"mp-address-eh",searchType:"autocomplete, lookupv2"},{country:"Norway",iso3Code:"NOR",iso2Code:"NO",datasetCode:"no-address",searchType:"singleline, typedown"},{country:"Norway",iso3Code:"NOR",iso2Code:"NO",datasetCode:"no-address-ed",searchType:"validate"},{country:"Norway",iso3Code:"NOR",iso2Code:"NO",datasetCode:"no-address-eh",searchType:"autocomplete, lookupv2"},{country:"Oman",iso3Code:"OMN",iso2Code:"OM",datasetCode:"om-address-ed",searchType:"singleline, validate"},{country:"Oman",iso3Code:"OMN",iso2Code:"OM",datasetCode:"om-address-eh",searchType:"autocomplete, lookupv2"},{country:"Pakistan",iso3Code:"PAK",iso2Code:"PK",datasetCode:"pk-address-ed",searchType:"singleline, validate"},{country:"Pakistan",iso3Code:"PAK",iso2Code:"PK",datasetCode:"pk-address-eh",searchType:"autocomplete, lookupv2"},{country:"Palau",iso3Code:"PLW",iso2Code:"PW",datasetCode:"pw-address-eh",searchType:"autocomplete, lookupv2"},{country:"Palestine",iso3Code:"PSE",iso2Code:"PS",datasetCode:"ps-address-eh",searchType:"autocomplete, lookupv2"},{country:"Panama",iso3Code:"PAN",iso2Code:"PA",datasetCode:"pa-address-ed",searchType:"singleline, validate"},{country:"Panama",iso3Code:"PAN",iso2Code:"PA",datasetCode:"pa-address-eh",searchType:"autocomplete, lookupv2"},{country:"Papua New Guinea",iso3Code:"PNG",iso2Code:"PG",datasetCode:"pg-address-ed",searchType:"singleline, validate"},{country:"Papua New Guinea",iso3Code:"PNG",iso2Code:"PG",datasetCode:"pg-address-eh",searchType:"autocomplete, lookupv2"},{country:"Paraguay",iso3Code:"PRY",iso2Code:"PY",datasetCode:"py-address-ed",searchType:"singleline, validate"},{country:"Paraguay",iso3Code:"PRY",iso2Code:"PY",datasetCode:"py-address-eh",searchType:"autocomplete, lookupv2"},{country:"Peru",iso3Code:"PER",iso2Code:"PE",datasetCode:"pe-address-ed",searchType:"singleline, validate"},{country:"Peru",iso3Code:"PER",iso2Code:"PE",datasetCode:"pe-address-eh",searchType:"autocomplete, lookupv2"},{country:"Philippines",iso3Code:"PHL",iso2Code:"PH",datasetCode:"ph-address-ed",searchType:"singleline, validate"},{country:"Philippines",iso3Code:"PHL",iso2Code:"PH",datasetCode:"ph-address-eh",searchType:"autocomplete, lookupv2"},{country:"Pitcairn Islands",iso3Code:"PCN",iso2Code:"PN",datasetCode:"pn-address-eh",searchType:"autocomplete, lookupv2"},{country:"Poland",iso3Code:"POL",iso2Code:"PL",datasetCode:"pl-address-ed",searchType:"singleline, validate"},{country:"Poland",iso3Code:"POL",iso2Code:"PL",datasetCode:"pl-address-eh",searchType:"autocomplete, lookupv2"},{country:"Portugal",iso3Code:"PRT",iso2Code:"PT",datasetCode:"pt-address-ed",searchType:"singleline, validate"},{country:"Portugal",iso3Code:"PRT",iso2Code:"PT",datasetCode:"pt-address-eh",searchType:"autocomplete, lookupv2"},{country:"Qatar",iso3Code:"QAT",iso2Code:"QA",datasetCode:"qa-address-ed",searchType:"singleline, validate"},{country:"Qatar",iso3Code:"QAT",iso2Code:"QA",datasetCode:"qa-address-eh",searchType:"autocomplete, lookupv2"},{country:"Romania",iso3Code:"ROU",iso2Code:"RO",datasetCode:"ro-address-ed",searchType:"singleline, validate"},{country:"Romania",iso3Code:"ROU",iso2Code:"RO",datasetCode:"ro-address-eh",searchType:"autocomplete, lookupv2"},{country:"Russian Federation",iso3Code:"RUS",iso2Code:"RU",datasetCode:"ru-address-ed",searchType:"singleline, validate"},{country:"Russian Federation",iso3Code:"RUS",iso2Code:"RU",datasetCode:"ru-address-eh",searchType:"autocomplete, lookupv2"},{country:"Rwanda",iso3Code:"RWA",iso2Code:"RW",datasetCode:"rw-address-ed",searchType:"singleline, validate"},{country:"Rwanda",iso3Code:"RWA",iso2Code:"RW",datasetCode:"rw-address-eh",searchType:"autocomplete, lookupv2"},{country:"Réunion",iso3Code:"REU",iso2Code:"RE",datasetCode:"re-address-eh",searchType:"autocomplete, lookupv2"},{country:"Saint Barthélemy",iso3Code:"BLM",iso2Code:"BL",datasetCode:"bl-address-eh",searchType:"autocomplete, lookupv2"},{country:"Saint Helena",iso3Code:"SHN",iso2Code:"SH",datasetCode:"sh-address-eh",searchType:"autocomplete, lookupv2"},{country:"Saint Kitts and Nevis",iso3Code:"KNA",iso2Code:"KN",datasetCode:"kn-address-ed",searchType:"singleline, validate"},{country:"Saint Kitts and Nevis",iso3Code:"KNA",iso2Code:"KN",datasetCode:"kn-address-eh",searchType:"autocomplete, lookupv2"},{country:"Saint Lucia",iso3Code:"LCA",iso2Code:"LC",datasetCode:"lc-address-eh",searchType:"autocomplete, lookupv2"},{country:"Saint Martin",iso3Code:"MAF",iso2Code:"MF",datasetCode:"mf-address-eh",searchType:"autocomplete, lookupv2"},{country:"Saint Pierre and Miquelon",iso3Code:"SPM",iso2Code:"PM",datasetCode:"pm-address-eh",searchType:"autocomplete, lookupv2"},{country:"Saint Vincent and the Grenadines",iso3Code:"VCT",iso2Code:"VC",datasetCode:"vc-address-ed",searchType:"singleline, validate"},{country:"Saint Vincent and the Grenadines",iso3Code:"VCT",iso2Code:"VC",datasetCode:"vc-address-eh",searchType:"autocomplete, lookupv2"},{country:"Samoa",iso3Code:"WSM",iso2Code:"WS",datasetCode:"ws-address-ed",searchType:"singleline, validate"},{country:"Samoa",iso3Code:"WSM",iso2Code:"WS",datasetCode:"ws-address-eh",searchType:"autocomplete, lookupv2"},{country:"San Marino",iso3Code:"SMR",iso2Code:"SM",datasetCode:"sm-address-ed",searchType:"singleline, validate"},{country:"San Marino",iso3Code:"SMR",iso2Code:"SM",datasetCode:"sm-address-eh",searchType:"autocomplete, lookupv2"},{country:"Sao Tome and Principe",iso3Code:"STP",iso2Code:"ST",datasetCode:"st-address-ed",searchType:"singleline, validate"},{country:"Sao Tome and Principe",iso3Code:"STP",iso2Code:"ST",datasetCode:"st-address-eh",searchType:"autocomplete, lookupv2"},{country:"Saudi Arabia",iso3Code:"SAU",iso2Code:"SA",datasetCode:"sa-address-ed",searchType:"singleline, validate"},{country:"Saudi Arabia",iso3Code:"SAU",iso2Code:"SA",datasetCode:"sa-address-eh",searchType:"autocomplete, lookupv2"},{country:"Senegal",iso3Code:"SEN",iso2Code:"SN",datasetCode:"sn-address-ed",searchType:"singleline, validate"},{country:"Senegal",iso3Code:"SEN",iso2Code:"SN",datasetCode:"sn-address-eh",searchType:"autocomplete, lookupv2"},{country:"Serbia",iso3Code:"SRB",iso2Code:"RS",datasetCode:"rs-address-ed",searchType:"singleline, validate"},{country:"Serbia",iso3Code:"SRB",iso2Code:"RS",datasetCode:"rs-address-eh",searchType:"autocomplete, lookupv2"},{country:"Seychelles",iso3Code:"SYC",iso2Code:"SC",datasetCode:"sc-address-ed",searchType:"singleline, validate"},{country:"Seychelles",iso3Code:"SYC",iso2Code:"SC",datasetCode:"sc-address-eh",searchType:"autocomplete, lookupv2"},{country:"Sierra Leone",iso3Code:"SLE",iso2Code:"SL",datasetCode:"sl-address-ed",searchType:"singleline, validate"},{country:"Sierra Leone",iso3Code:"SLE",iso2Code:"SL",datasetCode:"sl-address-eh",searchType:"autocomplete, lookupv2"},{country:"Singapore",iso3Code:"SGP",iso2Code:"SG",datasetCode:"sg-address",searchType:"autocomplete, singleline, typedown, validate, lookupv2"},{country:"Sint Maarten",iso3Code:"SXM",iso2Code:"SX",datasetCode:"sx-address-ed",searchType:"singleline, validate"},{country:"Sint Maarten",iso3Code:"SXM",iso2Code:"SX",datasetCode:"sx-address-eh",searchType:"autocomplete, lookupv2"},{country:"Slovakia",iso3Code:"SVK",iso2Code:"SK",datasetCode:"sk-address-ed",searchType:"singleline, validate"},{country:"Slovakia",iso3Code:"SVK",iso2Code:"SK",datasetCode:"sk-address-eh",searchType:"autocomplete, lookupv2"},{country:"Slovenia",iso3Code:"SVN",iso2Code:"SI",datasetCode:"si-address-ed",searchType:"singleline, validate"},{country:"Slovenia",iso3Code:"SVN",iso2Code:"SI",datasetCode:"si-address-eh",searchType:"autocomplete, lookupv2"},{country:"Solomon Islands",iso3Code:"SLB",iso2Code:"SB",datasetCode:"sb-address-ed",searchType:"singleline, validate"},{country:"Solomon Islands",iso3Code:"SLB",iso2Code:"SB",datasetCode:"sb-address-eh",searchType:"autocomplete, lookupv2"},{country:"Somalia",iso3Code:"SOM",iso2Code:"SO",datasetCode:"so-address-ed",searchType:"singleline, validate"},{country:"Somalia",iso3Code:"SOM",iso2Code:"SO",datasetCode:"so-address-eh",searchType:"autocomplete, lookupv2"},{country:"South Africa",iso3Code:"ZAF",iso2Code:"ZA",datasetCode:"za-address-ed",searchType:"singleline, validate"},{country:"South Africa",iso3Code:"ZAF",iso2Code:"ZA",datasetCode:"za-address-eh",searchType:"autocomplete, lookupv2"},{country:"South Georgia and the South Sandwich Islands",iso3Code:"SGS",iso2Code:"GS",datasetCode:"gs-address-eh",searchType:"autocomplete, lookupv2"},{country:"South Sudan",iso3Code:"SSD",iso2Code:"SS",datasetCode:"ss-address-ed",searchType:"singleline, validate"},{country:"South Sudan",iso3Code:"SSD",iso2Code:"SS",datasetCode:"ss-address-eh",searchType:"autocomplete, lookupv2"},{country:"Spain",iso3Code:"ESP",iso2Code:"ES",datasetCode:"es-address",searchType:"singleline, typedown"},{country:"Spain",iso3Code:"ESP",iso2Code:"ES",datasetCode:"es-address-ed",searchType:"validate"},{country:"Spain",iso3Code:"ESP",iso2Code:"ES",datasetCode:"es-address-eh",searchType:"autocomplete, lookupv2"},{country:"Sri Lanka",iso3Code:"LKA",iso2Code:"LK",datasetCode:"lk-address-ed",searchType:"singleline, validate"},{country:"Sudan",iso3Code:"SDN",iso2Code:"SD",datasetCode:"sd-address-ed",searchType:"singleline, validate"},{country:"Sudan",iso3Code:"SDN",iso2Code:"SD",datasetCode:"sd-address-eh",searchType:"autocomplete, lookupv2"},{country:"Suriname",iso3Code:"SUR",iso2Code:"SR",datasetCode:"sr-address-ed",searchType:"singleline, validate"},{country:"Suriname",iso3Code:"SUR",iso2Code:"SR",datasetCode:"sr-address-eh",searchType:"autocomplete, lookupv2"},{country:"Svalbard and Jan Mayen Islands",iso3Code:"SJM",iso2Code:"SJ",datasetCode:"sj-address-eh",searchType:"autocomplete, lookupv2"},{country:"Swaziland (Eswatini)",iso3Code:"SWZ",iso2Code:"SZ",datasetCode:"sz-address-ed",searchType:"singleline, validate"},{country:"Swaziland (Eswatini)",iso3Code:"SWZ",iso2Code:"SZ",datasetCode:"sz-address-eh",searchType:"autocomplete, lookupv2"},{country:"Sweden",iso3Code:"SWE",iso2Code:"SE",datasetCode:"se-address",searchType:"singleline, typedown"},{country:"Sweden",iso3Code:"SWE",iso2Code:"SE",datasetCode:"se-address-ed",searchType:"validate"},{country:"Sweden",iso3Code:"SWE",iso2Code:"SE",datasetCode:"se-address-eh",searchType:"autocomplete, lookupv2"},{country:"Switzerland",iso3Code:"CHE",iso2Code:"CH",datasetCode:"ch-address",searchType:"singleline, typedown"},{country:"Switzerland",iso3Code:"CHE",iso2Code:"CH",datasetCode:"ch-address-ed",searchType:"validate"},{country:"Switzerland",iso3Code:"CHE",iso2Code:"CH",datasetCode:"ch-address-eh",searchType:"autocomplete, lookupv2"},{country:"Syria",iso3Code:"SYR",iso2Code:"SY",datasetCode:"sy-address-ed",searchType:"singleline, validate"},{country:"Syria",iso3Code:"SYR",iso2Code:"SY",datasetCode:"sy-address-eh",searchType:"autocomplete, lookupv2"},{country:"Taiwan",iso3Code:"TWN",iso2Code:"TW",datasetCode:"tw-address-ed",searchType:"singleline, validate"},{country:"Taiwan",iso3Code:"TWN",iso2Code:"TW",datasetCode:"tw-address-eh",searchType:"autocomplete, lookupv2"},{country:"Tajikistan",iso3Code:"TJK",iso2Code:"TJ",datasetCode:"tj-address-ed",searchType:"singleline, validate"},{country:"Tajikistan",iso3Code:"TJK",iso2Code:"TJ",datasetCode:"tj-address-eh",searchType:"autocomplete, lookupv2"},{country:"Tanzania",iso3Code:"TZA",iso2Code:"TZ",datasetCode:"tz-address-ed",searchType:"singleline, validate"},{country:"Tanzania",iso3Code:"TZA",iso2Code:"TZ",datasetCode:"tz-address-eh",searchType:"autocomplete, lookupv2"},{country:"Thailand",iso3Code:"THA",iso2Code:"TH",datasetCode:"th-address-ed",searchType:"singleline, validate"},{country:"Thailand",iso3Code:"THA",iso2Code:"TH",datasetCode:"th-address-eh",searchType:"autocomplete, lookupv2"},{country:"Timor-Leste",iso3Code:"TLS",iso2Code:"TL",datasetCode:"tl-address-ed",searchType:"singleline, validate"},{country:"Timor-Leste",iso3Code:"TLS",iso2Code:"TL",datasetCode:"tl-address-eh",searchType:"autocomplete, lookupv2"},{country:"Togo",iso3Code:"TGO",iso2Code:"TG",datasetCode:"tg-address-ed",searchType:"singleline, validate"},{country:"Togo",iso3Code:"TGO",iso2Code:"TG",datasetCode:"tg-address-eh",searchType:"autocomplete, lookupv2"},{country:"Tokelau",iso3Code:"TKL",iso2Code:"TK",datasetCode:"tk-address-ed",searchType:"singleline, validate"},{country:"Tokelau",iso3Code:"TKL",iso2Code:"TK",datasetCode:"tk-address-eh",searchType:"autocomplete, lookupv2"},{country:"Tonga",iso3Code:"TON",iso2Code:"TO",datasetCode:"to-address-ed",searchType:"singleline, validate"},{country:"Tonga",iso3Code:"TON",iso2Code:"TO",datasetCode:"to-address-eh",searchType:"autocomplete, lookupv2"},{country:"Trinidad and Tobago",iso3Code:"TTO",iso2Code:"TT",datasetCode:"tt-address-ed",searchType:"singleline, validate"},{country:"Trinidad and Tobago",iso3Code:"TTO",iso2Code:"TT",datasetCode:"tt-address-eh",searchType:"autocomplete, lookupv2"},{country:"Tunisia",iso3Code:"TUN",iso2Code:"TN",datasetCode:"tn-address-ed",searchType:"singleline, validate"},{country:"Tunisia",iso3Code:"TUN",iso2Code:"TN",datasetCode:"tn-address-eh",searchType:"autocomplete, lookupv2"},{country:"Turkey",iso3Code:"TUR",iso2Code:"TR",datasetCode:"tr-address-ed",searchType:"singleline, validate"},{country:"Turkey",iso3Code:"TUR",iso2Code:"TR",datasetCode:"tr-address-eh",searchType:"autocomplete, lookupv2"},{country:"Turkish Republic of Northern Cyprus",iso3Code:"NCY",iso2Code:"CY",datasetCode:"ny-address-eh",searchType:"autocomplete, lookupv2"},{country:"Turkmenistan",iso3Code:"TKM",iso2Code:"TM",datasetCode:"tm-address-ed",searchType:"singleline, validate"},{country:"Turkmenistan",iso3Code:"TKM",iso2Code:"TM",datasetCode:"tm-address-eh",searchType:"autocomplete, lookupv2"},{country:"Turks and Caicos Islands",iso3Code:"TCA",iso2Code:"TC",datasetCode:"tc-address-eh",searchType:"autocomplete, lookupv2"},{country:"Tuvalu",iso3Code:"TUV",iso2Code:"TV",datasetCode:"tv-address-ed",searchType:"singleline, validate"},{country:"Tuvalu",iso3Code:"TUV",iso2Code:"TV",datasetCode:"tv-address-eh",searchType:"autocomplete, lookupv2"},{country:"Uganda",iso3Code:"UGA",iso2Code:"UG",datasetCode:"ug-address-ed",searchType:"singleline, validate"},{country:"Uganda",iso3Code:"UGA",iso2Code:"UG",datasetCode:"ug-address-eh",searchType:"autocomplete, lookupv2"},{country:"Ukraine",iso3Code:"UKR",iso2Code:"UA",datasetCode:"ua-address-ed",searchType:"singleline, validate"},{country:"Ukraine",iso3Code:"UKR",iso2Code:"UA",datasetCode:"ua-address-eh",searchType:"autocomplete, lookupv2"},{country:"United Arab Emirates",iso3Code:"ARE",iso2Code:"AE",datasetCode:"ae-address-ed",searchType:"singleline, validate"},{country:"United Arab Emirates",iso3Code:"ARE",iso2Code:"AE",datasetCode:"ae-address-eh",searchType:"autocomplete, lookupv2"},{country:"United Kingdom",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-address",searchType:"autocomplete, singleline, typedown, validate, lookupv2"},{country:"United Kingdom",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-multipleresidence",searchType:"autocomplete, singleline, typedown, validate, lookupv2"},{country:"United Kingdom",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-notyetbuilt",searchType:"autocomplete, singleline, typedown, validate, lookupv2"},{country:"United Kingdom AddressBase Premium",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-address-addressbase",searchType:"singleline, typedown, validate, lookup"},{country:"United Kingdom AddressBase Premium with Islands",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-addressbaseislands",searchType:"singleline, typedown, validate, lookup"},{country:"United Kingdom Business Names",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-business",searchType:"singleline, typedown"},{country:"United Kingdom Electricity",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-electricity",searchType:"autocomplete, singleline, typedown, lookupv2"},{country:"United Kingdom Gas",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-gas",searchType:"autocomplete, singleline, typedown, lookupv2"},{country:"United Kingdom Street Level",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-address-streetlevel",searchType:"singleline, typedown"},{country:"United Kingdom Extended Business",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-additional-businessextended",searchType:"singleline, typedown, validate, lookup"},{country:"United Kingdom Cymraeg (Welsh Language) Postal Address",iso3Code:"GBR",iso2Code:"GB",datasetCode:"gb-address-wales",searchType:"singleline, typedown, validate"},{country:"United States of America",iso3Code:"USA",iso2Code:"US",datasetCode:"us-address",searchType:"autocomplete, singleline, typedown, validate, lookupv2"},{country:"Uruguay",iso3Code:"URY",iso2Code:"UY",datasetCode:"uy-address-ed",searchType:"singleline, validate"},{country:"Uruguay",iso3Code:"URY",iso2Code:"UY",datasetCode:"uy-address-eh",searchType:"autocomplete, lookupv2"},{country:"Uzbekistan",iso3Code:"UZB",iso2Code:"UZ",datasetCode:"uz-address-ed",searchType:"singleline, validate"},{country:"Uzbekistan",iso3Code:"UZB",iso2Code:"UZ",datasetCode:"uz-address-eh",searchType:"autocomplete, lookupv2"},{country:"Vanuatu",iso3Code:"VUT",iso2Code:"VU",datasetCode:"vu-address-ed",searchType:"singleline, validate"},{country:"Vanuatu",iso3Code:"VUT",iso2Code:"VU",datasetCode:"vu-address-eh",searchType:"autocomplete, lookupv2"},{country:"Vatican City (Holy See)",iso3Code:"VAT",iso2Code:"VA",datasetCode:"va-address-ed",searchType:"singleline, validate"},{country:"Vatican City (Holy See)",iso3Code:"VAT",iso2Code:"VA",datasetCode:"va-address-eh",searchType:"autocomplete, lookupv2"},{country:"Venezuela",iso3Code:"VEN",iso2Code:"VE",datasetCode:"ve-address-ed",searchType:"singleline, validate"},{country:"Venezuela",iso3Code:"VEN",iso2Code:"VE",datasetCode:"ve-address-eh",searchType:"autocomplete, lookupv2"},{country:"Viet Nam",iso3Code:"VNM",iso2Code:"VN",datasetCode:"vn-address-ed",searchType:"singleline, validate"},{country:"Viet Nam",iso3Code:"VNM",iso2Code:"VN",datasetCode:"vn-address-eh",searchType:"autocomplete, lookupv2"},{country:"Virgin Islands, British",iso3Code:"VGB",iso2Code:"VG",datasetCode:"vg-address-eh",searchType:"autocomplete, lookupv2"},{country:"Virgin Islands, U.S.",iso3Code:"VIR",iso2Code:"VI",datasetCode:"vi-address-eh",searchType:"autocomplete, lookupv2"},{country:"Wallis and Futuna Islands",iso3Code:"WLF",iso2Code:"WF",datasetCode:"wf-address-eh",searchType:"autocomplete, lookupv2"},{country:"Western Sahara",iso3Code:"ESH",iso2Code:"EH",datasetCode:"eh-address-ed",searchType:"singleline, validate"},{country:"Western Sahara",iso3Code:"ESH",iso2Code:"EH",datasetCode:"eh-address-eh",searchType:"autocomplete, lookupv2"},{country:"Yemen",iso3Code:"YEM",iso2Code:"YE",datasetCode:"ye-address-ed",searchType:"singleline, validate"},{country:"Yemen",iso3Code:"YEM",iso2Code:"YE",datasetCode:"ye-address-eh",searchType:"autocomplete, lookupv2"},{country:"Zambia",iso3Code:"ZMB",iso2Code:"ZM",datasetCode:"zm-address-ed",searchType:"singleline, validate"},{country:"Zambia",iso3Code:"ZMB",iso2Code:"ZM",datasetCode:"zm-address-eh",searchType:"autocomplete, lookupv2"},{country:"Zimbabwe",iso3Code:"ZWE",iso2Code:"ZW",datasetCode:"zw-address-ed",searchType:"singleline, validate"},{country:"Zimbabwe",iso3Code:"ZWE",iso2Code:"ZW",datasetCode:"zw-address-eh",searchType:"autocomplete, lookupv2"}],c={en:{gbr:{locality:"Town/City",region:"County",postal_code:"Post code"},usa:{locality:"City",region:"State",postal_code:"ZIP code"}}},u=function(){this.size=0,this.maxSuggestions=25},p=function(){this.detailsMap=new Map},h="AUS Geocodes",C={latitude:"Latitude",longitude:"Longitude",match_level:"Match Level",sa1:"Sa1",meshblock:"Meshblock",lga_code:"Lga Code",lga_name:"Lga Name",street_pid:"Street Pid",locality_pid:"Locality Pid",geocode_level_code:"Geocode Level Code",geocode_level_description:"Geocode Level Description",geocode_type_code:"Geocode Type Code",geocode_type_description:"Geocode Type Description",highest_level_longitude:"Highest Level Longitude",highest_level_latitude:"Highest Level Latitude",highest_level_geocode_reliability_code:"Highest Level Geocode Reliability Code",highest_level_geocode_reliability_description:"Highest Level Geocode Reliability Description",confidence_level_code:"Confidence Level Code",confidence_level_description:"Confidence Level Description","2016_meshblock_id":"2016 Meshblock Id","2016_meshblock_code":"2016 Meshblock Code","2016_meshblock_match_code":"2016 Meshblock Match Code","2016_meshblock_match_description":"2016 Meshblock Match Description",collector_district_id:"Collector District Id",collector_district_code:"Collector District Code",commonwealth_electoral_boundary_id:"Commonwealth Electoral Boundary Id",commonwealth_electoral_boundary_name:"Commonwealth Electoral Boundary Name",statistical_local_area_id:"Statistical Local Area Id",statistical_local_area_code:"Statistical Local Area Code",statistical_local_area_name:"Statistical Local Area Name",state_electoral_boundary_id:"State Electoral Boundary Id",state_electoral_boundary_name:"State Electoral Boundary Name",state_electoral_effective_start:"State Electoral Effective Start",state_electoral_effective_end:"State Electoral Effective End",state_electoral_new_pid:"State Electoral New Pid",state_electoral_new_name:"State Electoral New Name",state_electoral_new_effective_start:"State Electoral New Effective Start",address_level_longitude:"Address Level Longitude",address_level_latitude:"Address Level Latitude",address_level_geocode_reliability_code:"Address Level Geocode Reliability Code",address_level_geocode_reliability_description:"Address Level Geocode Reliability Description",street_level_longitude:"Street Level Longitude",street_level_latitude:"Street Level Latitude",street_level_boundary_extent:"Street Level Boundary Extent",street_level_geocode_reliability_code:"Street Level Geocode Reliability Code",street_level_geocode_reliability_description:"Street Level Geocode Reliability Description",locality_level_longitude:"Locality Level Longitude",locality_level_latitude:"Locality Level Latitude",locality_level_geocode_reliability_code:"Locality Level Geocode Reliability Code",locality_level_geocode_reliability_description:"Locality Level Geocode Reliability Description",gnaf_legal_parcel_identifier:"Gnaf Legal Parcel Identifier",locality_class_code:"Locality Class Code"},y="AUS Consumer View Household",m={address:"Address",adults_at_address_code:"Adults At Address Code",adults_at_address_description:"Adults At Address Description",affluence_code:"Affluence Code",affluence_description:"Affluence Description",channel_preference:"Channel Preference",channel_preference_description:"Channel Preference Description",children_at_address_code_0_10_years:"Children At Address Code 0 10 Years",children_at_address_code_11_18_years:"Children At Address Code 11 18 Years",children_at_address_description_0_10_years:"Children At Address Description 0 10 Years",children_at_address_description_11_18_years:"Children At Address Description 11 18 Years",credit_demand_code:"Credit Demand Code",credit_demand_description:"Credit Demand Description",gnaf_latitude:"Gnaf Latitude",gnaf_longitude:"Gnaf Longitude",gnaf_pid:"Gnaf Pid",head_of_household_age_code:"Head Of Household Age Code",head_of_household_age_description:"Head Of Household Age Description",hin:"Hin",household_composition_code:"Household Composition Code",household_composition_description:"Household Composition Description",household_income_code:"Household Income Code",household_income_description:"Household Income Description",length_of_residence_code:"Length Of Residence Code",length_of_residence_description:"Length Of Residence Description",lifestage_code:"Lifestage Code",lifestage_description:"Lifestage Description",local_government_area_code:"Local Government Area Code",local_government_area_name:"Local Government Area Name",meshblock:"Meshblock",mosaic_group:"Mosaic Group",mosaic_type:"Mosaic Type",postcode:"Postcode",residential_flag:"Residential Flag",risk_insight_code:"Risk Insight Code",risk_insight_description:"Risk Insight Description",sa1:"Sa1",state:"State",suburb:"Suburb"},g="NZL Geocodes",v={front_of_property_nztm_x_coordinate:"Front of Property NZTM X Coordinate",front_of_property_nztm_y_coordinate:"Front of Property NZTM Y Coordinate",centroid_of_property_nztm_x_coordinate:"Centroid of Property NZTM X Coordinate",centroid_of_property_nztm_y_coordinate:"Centroid of Property NZTM Y Coordinate",front_of_property_latitude:"Front of Property Latitude",front_of_property_longitude:"Front of Property Longitude",centroid_of_property_latitude:"Centroid of Property Latitude",centroid_of_property_longitude:"Centroid of Property Longitude",linz_parcel_id:"Linz Parcel Id",property_purpose_type:"Property Purpose Type",addressable:"Addressable",mesh_block_code:"Mesh Block Code",territorial_authority_code:"Territorial Authority Code",territorial_authority_name:"Territorial Authority Name",regional_council_code:"Regional Council Code",regional_council_name:"Regional Council Name",general_electorate_code:"General Electorate Code",general_electorate_name:"General Electorate Name",maori_electorate_code:"Maori Electorate Code",maori_electorate_name:"Maori Electorate Name",match_level:"Match Level"},T="NZL Consumer View Household",f={adults_at_address:"Adults At Address",children_at_address:"Children At Address",head_of_household_age:"Head Of Household Age",head_of_household_lifestage:"Head Of Household Lifestage",household_composition:"Household Composition",mosaic_group:"Mosaic Group",mosaic_segment:"Mosaic Segment",mosaic_type_group:"Mosaic Type Group"},k="USA Geocodes",b={latitude:"Latitude",longitude:"Longitude",match_level:"Match Level",census_tract:"Census Tract",census_block:"Census Block",core_based_statistical_area:"Core Based Statistical Area",congressional_district_code:"Congressional District Code",county_code:"Country Code"},w="GBR Location Essential",_={latitude:"Latitude",longitude:"Longitude",match_level:"Match Level",udprn:"UDPRN",uprn:"UPRN",x_coordinate:"X Coordinate",y_coordinate:"Y Coordinate"},A={latitude:"Latitude",longitude:"Longitude",name:"Name",description:"Description"},S="Global Geocodes",M={latitude:"Latitude",longitude:"Longitude",match_level:"Match Level"},L={mosaic_group:[{id:"A",title:"First Class Life",description:"Wealthiest group in Australia, typically older middle-aged families with significant assets and income"},{id:"B",title:"Comfortable Foundations",description:"Gen X families with school-aged children, working in white-collar professions and living in suburban areas"},{id:"C",title:"Striving for Status",description:"Young, successful, career-driven professionals living in central city areas with high income and no children"},{id:"D",title:"Secure Tranquillity",description:"Affluent retirees living in higher valued properties in desirable areas"},{id:"E",title:"Family Fringes",description:"Middle-aged traditional families living on large outer-suburban plots, with comfortable incomes and long commutes"},{id:"F",title:"Establishing Roots",description:"Millennial first home buyers, living 10km+ from the city centre with above average income"},{id:"G",title:"Growing Independence",description:"Educated millennials at the start of their careers, renting apartments close to city centres"},{id:"H",title:"Middle Blue-collars",description:"Younger blue-collar workers renting far from city centres, with below average income"},{id:"I",title:"Traditional Pursuits",description:"Average income traditional families & single parents with school-aged children living in outer suburban and regional locations"},{id:"J",title:"True Grit",description:"Blue-collar households in gainful employment, residing in locations across outer suburban, regional and mining towns"},{id:"K",title:"Mature Freedom",description:"Gen X couples without children, renting apartments and terraces in high growth suburbs"},{id:"L",title:"Hardship & Perseverance",description:"Unemployed and blue-collar workers living in units and flats on low incomes"},{id:"M",title:"Graceful Ageing",description:"Older retirees with below average income, living in owned properties or retirement villages"},{id:"N",title:"Rural Commitment",description:"Rural people working in agriculture, living on large plots of land far from main roads and main towns"}],mosaic_type:[{id:"A01",title:"Top of the Ladder",description:"Wealthiest families, married couples often with adult children, owning very expensive properties in exclusive inner-urban areas"},{id:"A02",title:"Luxury Living",description:"Baby boomer families, often with adult children, owning expensive properties in inner-urban & coastal areas"},{id:"A03",title:"Central Prosperity",description:"Middle-older aged empty nester couples renting very expensive properties in inner-urban areas, with high income"},{id:"A04",title:"Suburban Esteem",description:"Traditional baby boomer couples with adult children, owning expensive properties in inner-urban & suburban areas of Sydney & Melbourne"},{id:"B05",title:"Successful Spending",description:"Young, married couples with children and high income, living in outer-suburban/metro-fringe areas"},{id:"B06",title:"Careers & Kids",description:"Gen X families with children, living in expensive properties in suburban areas, with high income"},{id:"B07",title:"Fruitful Families",description:"Gen X families with many children, living in metro-fringe areas, with high income"},{id:"C08",title:"Rooftops & Careers",description:"Well-educated, high-powered business people with very high income and no children, living in expensive properties in central Sydney"},{id:"C09",title:"Elite Alternatives",description:"Well-educated professionals, living in trendy inner-urban areas, with high income"},{id:"C10",title:"Power Couples",description:"Young diverse couples, well-educated, transient, city centre renters with high income and no children"},{id:"D11",title:"Scenic Connection",description:"Older couples in semi-retirement, living in suburban areas and nearby towns for many years, with high income"},{id:"D12",title:"Journeyed Equity",description:"Elderly couples from multicultural backgrounds living in expensive properties in suburban areas of Sydney & Melbourne"},{id:"D13",title:"Coastal Comfort",description:"Retired, traditional couples living in coastal and scenic areas, with average pensionable income levels"},{id:"E14",title:"Spacious Traditions",description:"Middle-aged, traditional families with older children, owning large and expensive properties in outer-suburban areas with high income"},{id:"E15",title:"Opulent Designs",description:"Middle-aged families owning huge houses in outer-suburban areas, with high income"},{id:"E16",title:"Hardware & Acreage",description:"Working in trades, middle-aged families owning acreages of land with large properties just outside the metro fringe"},{id:"F17",title:"Determined Suburbans",description:"Professional couples and singles with high income, owning their first home in high growth inner suburbs"},{id:"F18",title:"Developing Domestics",description:"Young first-home-owner families with very young children, recently moved into new housing estates, with above average income"},{id:"F19",title:"Striving Scholars",description:"Young, highly educated singles and couples, with above average income, living in high growth suburbs"},{id:"G20",title:"Youthful Ambition",description:"Young singles and couples, some students, with no children, renting flats in inner-urban areas, with average income"},{id:"G21",title:"Emerging Metros",description:"Young, well-educated and culturally diverse, renting flats in suburban areas of Sydney, with above average income and no children"},{id:"G22",title:"Spirit Questers",description:"Millennial singles renting in coastal tourist areas, with below average income"},{id:"G23",title:"Global Studies",description:"Young student renters near university campuses, culturally diverse with very low or no income but high spend"},{id:"H24",title:"Backyards & Mates",description:"Millennial blue-collar couples and singles, living in outer-suburban areas and surrounding towns with average income"},{id:"H25",title:"Prams & Trades",description:"Younger blue-collar families with many children, living in new outer-suburban housing estates, with low to average income"},{id:"H26",title:"Earnest Internationals",description:"Younger, diverse blue-collar commuters renting apartments in Sydney outer-suburban areas, with low income"},{id:"H27",title:"Township Solos",description:"Younger blue-collar singles in regional towns, with low income but have financial stability"},{id:"I28",title:"Schools & Bills",description:"Millennial families with young children, sometimes single parents, commuting from outer-suburban areas with average incomes"},{id:"I29",title:"Middle of the Road",description:"Older traditional families with older children, commuting from the metro-fringe with average to high incomes"},{id:"I30",title:"Regional Essentials",description:"Couples and single parents with children living in regional areas with low to average incomes"},{id:"J31",title:"Minerals & Airports",description:"Mixture of singles and couples in mining towns, sometimes with children, earning high incomes"},{id:"J32",title:"Selfless & Hardworking",description:"Blue-collar families from multicultural backgrounds, living in outer-suburban areas, with average to high income"},{id:"J33",title:"Life in the Slow Lane",description:"Middle-aged, blue-collar couples living in outer-suburban/metro-fringe areas, with average income"},{id:"J34",title:"Country Town Courage",description:"Low education, monocultural, manual workers with low income, living in low value properties in rural towns"},{id:"K35",title:"Mature Modernites",description:"Middle-aged couples without children, renting in inner suburban apartments and terraces"},{id:"K36",title:"New-found Freedom",description:"Middle-aged, empty nester couples living in outer-suburban/metro-fringe areas, with above average income"},{id:"K37",title:"Realistic Horizons",description:"Gen X couples and sharers living in outer-suburban and regional areas, with low income and small properties"},{id:"L38",title:"Reset Regionals",description:"Blue-collar families, often single parents, living in rural towns with low income and dependent children"},{id:"L39",title:"New-found Life",description:"Multicultural families, sometimes single parents, living in outer-suburban areas with low income"},{id:"L40",title:"Satellite Battlers",description:"Low income singles in regional towns, sometimes living in social housing"},{id:"L41",title:"Downtown Blues",description:"Older single and diverse, city centre renters with very low income, often living in social housing"},{id:"L42",title:"Township Assistance",description:"Younger families, often single parents, with low incomes in regional towns, often living in social housing"},{id:"M43",title:"Blue-collar Retirees",description:"Multicultural older couples living in outer-suburban areas for a long time, with low income but high property value"},{id:"M44",title:"Staying Put",description:"Older, retired couples, sometimes with adult children or carers, who are long term resident in outer-suburban areas"},{id:"M45",title:"Lonesome Elders",description:"Older singles, living in outer-suburban areas and satellite towns, with below average income"},{id:"M46",title:"Retirement Village",description:"Elderly, traditional couples and singles living in retirement villages in cities and regional towns"},{id:"M47",title:"Rural Retirement",description:"Elderly couples, sometimes with adult children or carers, who are long term residents in rural towns, with low pension income"},{id:"N48",title:"Farming Reliance",description:"Rural farmers and farm owners with below average income, living 10-40km away from the nearest town"},{id:"N49",title:"Outback Comfort",description:"Very rural farmers and farm owners with below average income, living 40km+ from the nearest town"},{id:"N50",title:"Soil & Toil",description:"Single farm workers in very small rural towns. with low income and low value properties"},{id:"N51",title:"Rustic Isolation",description:"Low education, traditional, singles in far inland remote towns, with low income and low value properties"}]},E={adults_at_address:[{id:"1",title:"One adult",description:"The residential property is likely to contain one adult over the age of 18 years residing within the dwelling"},{id:"2",title:"Two adults",description:"The residential property is likely to contain two adults over the age of 18 years residing within the dwelling"},{id:"3",title:"Three adults",description:"The residential property is likely to contain three adults over the age of 18 years residing within the dwelling"},{id:"4",title:"Four adults",description:"The residential property is likely to contain four adults over the age of 18 years residing within the dwelling"},{id:"5",title:"Five adults",description:"The residential property is likely to contain five adults over the age of 18 years residing within the dwelling"},{id:"6",title:"Six adults",description:"The residential property is likely to contain six adults over the age of 18 years residing within the dwelling"},{id:"7",title:"Seven adults",description:"The residential property is likely to contain seven adults over the age of 18 years residing within the dwelling"},{id:"8",title:"Eight adults",description:"The residential property is likely to contain eight adults over the age of 18 years residing within the dwelling"}],children_at_address:[{id:"1",title:"Extremely low likelihood",description:"Extremely low likelihood of the presence of children in the household"},{id:"2",title:"Very low likelihood",description:"Very low likelihood of the presence of children in the household"},{id:"3",title:"Low likelihood",description:"Low likelihood of the presence of children in the household"},{id:"4",title:"Below average likelihood",description:"Below average likelihood of the presence of children in the household"},{id:"5",title:"Average likelihood",description:"Average likelihood of the presence of children in the household"},{id:"6",title:"Above average likelihood",description:"Above average likelihood of the presence of children in the household"},{id:"7",title:"Moderately high likelihood",description:"Moderately high likelihood of the presence of children in the household"},{id:"8",title:"High likelihood",description:"High likelihood of the presence of children in the household"},{id:"9",title:"Very high likelihood",description:"Very high likelihood of the presence of children in the household"},{id:"10",title:"Extremely high likelihood",description:"Extremely high likelihood of the presence of children in the household"}],head_of_household_age:[{id:"1",title:"Under 20",description:"The age of the consumer (combination of both actual and estimated) is under 20 years"},{id:"2",title:"20 to 24 years",description:"The age of the consumer (combination of both actual and estimated) is between 20 to 24 years"},{id:"3",title:"25 to 29 years",description:"The age of the consumer (combination of both actual and estimated) is between 25 to 29 years"},{id:"4",title:"30 to 34 years",description:"The age of the consumer (combination of both actual and estimated) is between 30 to 34 years"},{id:"5",title:"35 to 39 years",description:"The age of the consumer (combination of both actual and estimated) is between 35 to 39 years"},{id:"6",title:"40 to 44 years",description:"The age of the consumer (combination of both actual and estimated) is between 40 to 44 years"},{id:"7",title:"45 to 49 years",description:"The age of the consumer (combination of both actual and estimated) is between 45 to 49 years"},{id:"8",title:"50 to 54 years",description:"The age of the consumer (combination of both actual and estimated) is between 50 to 54 years"},{id:"9",title:"55 to 59 years",description:"The age of the consumer (combination of both actual and estimated) is between 55 to 59 years"},{id:"10",title:"60 to 64 years",description:"The age of the consumer (combination of both actual and estimated) is between 60 to 64 years"},{id:"11",title:"65 to 69 years",description:"The age of the consumer (combination of both actual and estimated) is between 65 to 69 years"},{id:"12",title:"70 to 74 years",description:"The age of the consumer (combination of both actual and estimated) is between 70 to 74 years"},{id:"13",title:"75 to 79 years",description:"The age of the consumer (combination of both actual and estimated) is between 75 to 79 years"},{id:"14",title:"80 to 84 years",description:"The age of the consumer (combination of both actual and estimated) is between 80 to 84 years"},{id:"15",title:">= 85 year",description:"The age of the consumer (combination of both actual and estimated) is greater than or equal to 85 years"}],head_of_household_lifestage:[{id:"1",title:"Young families",description:"Families, Extended Families and Single Parents under 35"},{id:"2",title:"Independent Youth",description:"Couples, Singles and Homesharers under 35"},{id:"3",title:"Maturing Couples and Families",description:"Families, Couples, Extended Families and Single Parents aged 35-44"},{id:"4",title:"Maturing Independence",description:"Singles and Homesharers aged 35-54"},{id:"5",title:"Established Couples and Families",description:"Families, Couples, Extended Families and Single Parents aged 45-54"},{id:"6",title:"Older Couples and Families",description:"Families, Couples, Extended Families and Single Parents aged 55-64"},{id:"7",title:"Older Independence",description:"Singles and Homesharers aged 55-64"},{id:"8",title:"Elderly Families",description:"Families, Extended Families and Single Parents 65 and over"},{id:"9",title:"Elderly Couples",description:"Couples 65 and over"},{id:"10",title:"Elderly Singles",description:"Singles and Homesharers 65 and over"}],household_composition:[{id:"1",title:"Families",description:"The residential property is likely to contain a family unit which is made up of two adults with children"},{id:"2",title:"Extended Families",description:"The residential property is likely to contain an extended family unit which is made up of three or more adults with the same surname"},{id:"3",title:"Couples",description:"The residential property is likely to contain people living as a couple which is made up of two adults and no children"},{id:"4",title:"Single Parent",description:"The residential property is likely to contain an single parent family unit which is made up of one adult with children"},{id:"5",title:"Single",description:"The residential property is likely to contain a single adult only"},{id:"6",title:"Homeshares",description:"The residential property is likely to contain a home share environment which is made up of three or more adults with different surnames"}],mosaic_group:[{id:"A",title:"Corporate Ladder Kings",description:"Educated professionals living in large houses in desirable areas, looking for balance to their busy lives and planning for the future"},{id:"B",title:"Reaping The Rewards",description:"Established conservative older couples living comfortable lives in high quality houses, appreciating traditional country pursuits"},{id:"C",title:"Tractors And Trees",description:"Hard working rural farming families living in large comfortable homes, who are engaged in the local community"},{id:"D",title:"Smartphone Savvies",description:"Young technology savvy home sharers or families living comfortably in urban apartments with strong career goals and a positive outlook"},{id:"E",title:"Watching The Pennies",description:"Older families and couples with conservative views, who are careful with their money and have an easy going attitude to life"},{id:"F",title:"Generation Next",description:"Young singles who are studying or just starting out in their careers, living in urban apartments, and love technology and new gadgets"},{id:"G",title:"Crochet Communities",description:"Elderly singles living in rented apartments, living off their investments, who watch TV and listen to the radio to stay in touch"},{id:"H",title:"Bargains, Benefits And Babies",description:"Young families focused on their young kids who are finding it hard to balance work and leisure, feeling burdened by their finances"},{id:"I",title:"Extended Cultural Living",description:"Mixed family Maori or Pacific Islander households with a strong family focus, financially stressed and making do"}],mosaic_segment:[{id:"01_1",title:"More elderly, more employers and more single person households"},{id:"01_2",title:"More children, higher affluent and more 7+ person households"},{id:"02_1",title:"Much more elderly, more employers and more single person households"},{id:"02_2",title:"More overseas born, more 7+ person households and higher property ownership"},{id:"02_3",title:"Much more children, higher affluent and higher property ownership"},{id:"03_1",title:"Shorter time at address, higher affluent, larger properties"},{id:"03_2",title:"More elderly, longer time at address and more urban"},{id:"03_3",title:"Much longer time at address, more highly educated and more single person households"},{id:"04_1",title:"Higher affluent, higher household income, larger properties"},{id:"04_2",title:"Longer time at address, more single person households and more urban"},{id:"04_3",title:"Less educated, higher property ownership and more rural"},{id:"05_1",title:"More highly educated, higher affluent and larger properties"},{id:"05_2",title:"More children, more employees and more urban"},{id:"05_3",title:"More children, less educated, higher property ownership"},{id:"06_1",title:"More employers, smaller properties and more rural"},{id:"06_2",title:"More elderly, more 3+ children households, less educated"},{id:"06_3",title:"More highly educated, more overseas born and more urban"},{id:"06_4",title:"Higher affluence, higher household income, larger properties"},{id:"07_1",title:"Much more elderly, much more 3+ children households, higher affluence"},{id:"07_2",title:"More elderly, more employers, larger properties"},{id:"07_3",title:"More children, more longer time at address, more 7+ person households"},{id:"08_1",title:"Less educated, smaller properties, more rural"},{id:"08_2",title:"More elderly, more New Zealand born, higher property ownership"},{id:"08_3",title:"Much more overseas born, higher household income, more urban"},{id:"09_1",title:"Much more children, shorter time at address, much lower property ownership"},{id:"09_2",title:"Much longer time at address, much less educated, more single person households"},{id:"09_3",title:"More elderly, higher affluent, much higher property ownership"},{id:"10_1",title:"Much more children, more employees, much higher property ownership"},{id:"10_2",title:"Much more elderly, much more single person households, much more urban"},{id:"10_3",title:"Much longer time at address, much more employers, more rural"},{id:"10_4",title:"Shorter time at address, higher affluent, more 7+ person households"},{id:"11_1",title:"More no children households, more longer time at address, higher property ownership"},{id:"11_2",title:"Much more no children households, much lower property ownership, much smaller properties"},{id:"11_3",title:"More 3+ children households, less educated, larger properties"},{id:"12_1",title:"More longer time at address, more overseas born, more urban"},{id:"12_2",title:"Much more no children households, more highly educated, lower property ownership"},{id:"12_3",title:"More elderly, more longer time at address, less educated"},{id:"12_4",title:"Much more children, shorter time at address, more rural"},{id:"13_1",title:"More highly educated, higher affluence, higher household income"},{id:"13_2",title:"Much longer time at address, much less educated, much more single person households"},{id:"13_3",title:"Much more deprived, much more 7+ person households, much lower property ownership"},{id:"14_1",title:"More single person households, lower property ownership, smaller properties"},{id:"14_2",title:"More New Zealand born, more single person households, smaller properties"},{id:"14_3",title:"Higher household income, much more 7+ person households, larger properties"},{id:"15_1",title:"More children, more New Zealand born, more single person households"},{id:"15_2",title:"Much more 7+ person households, much lower property ownership, smaller properties"},{id:"15_3",title:"More highly educated, higher household income, larger properties"},{id:"16_1",title:"Much more overseas born, much more 7+ person households, much lower property ownership"},{id:"16_2",title:"More children, less educated, much more New Zealand born"},{id:"16_3",title:"More highly educated, higher affluence, higher household income"},{id:"16_4",title:"Much less educated, lower household income, much more single person households"},{id:"17_1",title:"More no children households, more longer time at address, smaller properties"},{id:"17_2",title:"More elderly, more employers, larger properties"},{id:"17_3",title:"More elderly, more deprived, more urban"},{id:"18_1",title:"More no children households, more 7+ person households, more urban"},{id:"18_2",title:"More highly educated, higher affluent, more single person households"},{id:"18_3",title:"More deprived, more single person households, larger properties"},{id:"18_4",title:"More children, more 7+ person households, lower property ownership"},{id:"18_5",title:"More elderly, lower household income, smaller properties"},{id:"19_1",title:"More children, higher household income, higher property ownership"},{id:"19_2",title:"Much less educated, much more deprived, lower household income"},{id:"19_3",title:"More no children households, more highly educated, more single person households"},{id:"19_4",title:"More elderly, higher affluent, more 7+ person households"},{id:"20_1",title:"More children, less educated, larger properties"},{id:"20_2",title:"More highly educated, much smaller properties, much more urban"},{id:"21_1",title:"More New Zealand born, much more deprived, much more single person households"},{id:"21_2",title:"Much more overseas born, much more 7+ person households, much higher property ownership"},{id:"21_3",title:"Much more no children households, lower property ownership, much smaller properties"},{id:"22_1",title:"More longer time at address, much more 7+ person households, larger properties"},{id:"22_2",title:"Much more overseas born, much more deprived, much smaller properties"},{id:"23_1",title:"More highly educated, much more employers, much smaller properties"},{id:"23_2",title:"More children, less educated, higher property ownership"},{id:"23_3",title:"More highly educated, more overseas born, higher household income"},{id:"23_4",title:"Much longer time at address, much less educated, more rural"},{id:"24_1",title:"More children, much more deprived, larger properties"},{id:"24_2",title:"Much more elderly, much more single person households, much smaller properties"},{id:"25_1",title:"More no children households, lower property ownership, much more urban"},{id:"25_2",title:"Much longer time at address, much more deprived, more rural"},{id:"25_3",title:"Much more elderly, more 3+ children households, more urban"},{id:"26_1",title:"Much more children, more overseas born, more urban"},{id:"26_2",title:"Much more elderly, much longer time at address, more rural"},{id:"26_3",title:"More children, higher household income, more 7+ person households"},{id:"26_4",title:"Much more elderly, more single person households, more rural"},{id:"27_1",title:"More elderly, larger properties, much more urban"},{id:"27_2",title:"Much more children, more highly educated, higher affluence"},{id:"27_3",title:"Much more elderly, much more single person households, smaller properties"},{id:"27_4",title:"More longer time at address, less educated, higher property ownership"},{id:"28_1",title:"More children, more deprived, more 7+ person households"},{id:"28_2",title:"More children, more 7+ person households, more urban"},{id:"28_3",title:"More 7+ person households, larger properties, more rural"},{id:"28_4",title:"Much more elderly, much more single person households, much smaller properties"},{id:"29_1",title:"More employers, more single person households, smaller properties"},{id:"29_2",title:"Much more deprived, more employers, much more 7+ person households"},{id:"29_3",title:"More children, shorter time at address, lower property ownership"},{id:"29_4",title:"No children households, more longer time at address, less educated, higher property ownership, urban"},{id:"30_1",title:"Much more deprived, much more single person households, much smaller properties"},{id:"30_2",title:"More overseas born, higher household income, much more 7+ person households"},{id:"30_3",title:"Much more children, more longer time at address, more 7+ person households"},{id:"31_1",title:"More New Zealand born, more single person households, higher property ownership"},{id:"31_2",title:"Much less educated, much more deprived, much more 7+ person households"},{id:"31_3",title:"More highly educated, more single person households, smaller properties"},{id:"31_4",title:"More children, much more 7+ person households, larger properties"},{id:"32_1",title:"Much more overseas born, much more deprived, much smaller properties"},{id:"32_2",title:"More longer time at address, much more New Zealand born, much higher property ownership"},{id:"33_1",title:"More employers, smaller properties, more rural"},{id:"33_2",title:"Much more deprived, lower property ownership, more urban"},{id:"33_3",title:"More employees, higher property ownership, more urban"},{id:"34_1",title:"More longer time at address, more New Zealand born, much higher property ownership"},{id:"34_2",title:"More single person households, much higher property ownership, more rural"},{id:"34_3",title:"Much more overseas born, lower property ownership, much more 7+ person households"}],mosaic_type_group:[{id:"A01",title:"Power Professionals",description:"Highly prosperous households comprising of finance savvy professionals and business owners, living in grand houses in desirable areas"},{id:"A02",title:"Wine And Waves",description:"Older, well-educated families on the verge of retirement enjoying the rewards of successful careers, using the internet to keep updated"},{id:"A03",title:"Double Dollar Suits ",description:"Well-educated double income professional couples with young families, using technology to juggle their busy lifestyles"},{id:"A04",title:"Gold Plated Ride-Ons",description:"Wealthy families with large modern properties on the rural outskirts, enjoying the outdoors and have practical technology needs"},{id:"B05",title:"Tea And Biscuits",description:"Financially secure, older couples who have paid off their homes close to the city, now enjoying more time for their hobbies"},{id:"B06",title:"Outdoor Wanderers",description:"Established couples or families living in larger rural properties who embrace the outdoor life and enjoy traditional country pursuits"},{id:"B07",title:"Backwater Bowls",description:"Traditional New Zealander wealthy retired couples, enjoying a comfortable settled life in regional towns, leading healthy lifestyles"},{id:"C08",title:"High Speed Harvesters",description:"Older hard working families with farming backgrounds in rural locations, transferring the running of the farm to the next generation"},{id:"C09",title:"Farming The Wilderness",description:"Practically minded rural farming families with modest lifestyles, financial burdens, and a passion for fast cars and motorbikes"},{id:"C10",title:"Rustic Retirees",description:"Semi-retired older couples living in outer regional and rural locations, with simple tastes, enjoying the local community spirit"},{id:"D11",title:"Working The Network",description:"Financially established and techno savvy, highly educated singles who own their urban apartments and enjoy a fast paced lifestyle"},{id:"D12",title:"Hash Tag Look At Me ",description:"Fashion focused, social and technologically astute younger families, renting modern properties in the major cities"},{id:"D13",title:"Sharing Spaces",description:"Middle-aged home sharers, living in the suburbs who enjoy social networking and trying to find a balance between work and play"},{id:"D14",title:"Touchscreens And Takeaways",description:"Extended families in modern suburban houses, with low disposable income who like to stand out and are influenced by their social sphere"},{id:"D15",title:"Halftime Hopes",description:"Financially comfortable families who require technology to be practical, living in city apartments and optimistic about the future"},{id:"E16",title:"Carefree Suburbia",description:"Older families keeping an eye on their finances but enjoying an easy going life using traditional media to stay informed and up to date"},{id:"E17",title:"Creatures Of Habit",description:"Elderly couples enjoying a stress free life while residing in segregated neighbourhoods, and listening to the radio to stay in touch"},{id:"E18",title:"Mortgages And Microwaves",description:"Hands-on people who enjoy fixing and tinkering with cars and an active outdoor lifestyle who are balancing large financial commitments"},{id:"E19",title:"Newspapers And Knitting",description:"Senior, mainly divorced singles, retired and financially comfortable with traditional values, preferring bricks and mortar to online"},{id:"F20",title:"Turbo Treadmills",description:"Driven, degree-educated individuals in early stages of their careers, living in shared spaces and using their mobile to stay connected"},{id:"F21",title:"Win The Better Life",description:"Younger singles living in shared rental apartments where job security is important and are searching for something better in life"},{id:"F22",title:"Just Add Water ",description:"Young students in full time study who are connected 24/7, living in campus accommodation, spending their free time with friends"},{id:"G23",title:"Messaging Motorheads",description:"Mix of older and young singles renting in the suburbs, heavy texters and social networkers wanting to be taken seriously"},{id:"G24",title:"Community Greys ",description:"Retired, mainly single, elderly, living off their investments in retirement villages and taking each day as it comes"},{id:"G25",title:"Talkback And Telly",description:"Price sensitive seniors, renting government housing in rural locations, living a low-key lifestyle to keep on top of their finances"},{id:"H26",title:"Fishing For A Bargain",description:"Mature, dual income, family centric households in mortgaged moderate sized homes, on a tight budget and enjoy hunting for bargains"},{id:"H27",title:"Hiring The Lifestyle",description:"Shopping fanatic young families in small homes, with average incomes, who love loyalty cards and coupons, and pay attention to adverts"},{id:"H28",title:"Remote Controlling",description:"Busy mixed families on low incomes in rented government housing, where kids come first and who impulse purchase for the latest gadgets"},{id:"H29",title:"Stately Renters ",description:"Older single parents of Maori descent, living in state housing, who feel quite isolated and have financial challenges"},{id:"H30",title:"Kids And Cars ",description:"Single parents with young kids, living in some of the poorer areas with strong focus on their kids and a preference for online shopping"},{id:"I31",title:"Window Shopping Strugglers",description:"Ethnic minorities living in large multi family households struggling on low incomes, but with an active social life"},{id:"I32",title:"Square Eyes And Empty Pockets",description:"Singles on low incomes or benefits, living in Government housing, with a low key lifestyle and high television and radio consumption"},{id:"I33",title:"Extending The Benefits",description:"Large multi-family Maori households on low income or benefits,who enjoy down to earth pursuits and more traditional media channels"},{id:"I34",title:"Play Dough And Pizza",description:"Mixed family Maori and Pacific Islander households, with a strong focus on their young children but struggling financially"}]},R={locality_class_code:[{id:"A",title:"ALIAS ONLY LOCALITY"},{id:"D",title:"DISTRICT"},{id:"G",title:"GAZETTED LOCALITY"},{id:"H",title:"HUNDRED"},{id:"I",title:"INDIGENOUS LOCATION",description:"Location identified in the Australian government indigenous programs and policy locations (AGIL) dataset available at http://data.gov.au"},{id:"M",title:"MANUALLY VALIDATED"},{id:"T",title:"TOPOGRAPHIC LOCALITY"},{id:"U",title:"UNOFFICIAL SUBURB"},{id:"V",title:"UNOFFICIAL TOPOGRAPHIC FEATURE"}]},N=function(){function t(o){var t=this;this.countryDropdown=[],this.componentsCollectionMap=new Map,this.metadataCollectionMap=new Map,this.geocodes=new p,this.cvHousehold=new p,this.tooltipDescriptionMap=new Map,this.premiumLocationInsightMap=new Map,this.baseUrl="https://api.experianaperture.io/",this.datasetsEndpoint="address/datasets/v1",this.searchEndpoint="address/search/v1",this.lookupV2Endpoint="address/lookup/v2",this.validateEndpoint="address/validate/v1",this.promptsetEndpoint="address/promptsets/v1",this.stepInEndpoint="address/suggestions/stepin/v1",this.refineEndpoint="address/suggestions/refine/v1",this.enrichmentEndpoint="enrichment/v2",this.poweredByLogo={element:null,create:function(e){var o={text:"".concat(this.svg," Powered by Experian"),format:""},t=e.createListItem(o);return t.classList.add("powered-by-experian"),e.list.parentNode.appendChild(t),t},destroy:function(e){this.element&&(e.list.parentNode.removeChild(this.element),this.element=void 0)},svg:''},this.result={formattedAddressContainer:null,lastAddressField:null,generateAddressLineRequired:!1,show:function(o){if(t.searchSpinner.hide(),t.picklist.hide(),t.lastSearchTerm="",t.searchType===e.AUTOCOMPLETE||o.result.address&&o.result.confidence!==a.NO_MATCHES){t.inputs.forEach((function(e){return e.value=""})),t.result.calculateIfAddressLineGenerationRequired(),t.result.formattedAddressContainer=t.options.elements.formattedAddressContainer,!t.result.formattedAddressContainer&&t.result.generateAddressLineRequired&&t.result.createFormattedAddressContainer();for(var s=0;s0)for(var o=0;o0){for(var t=0,s=o;t?/";:£§º©®\s]+[.。。・・︒។։။۔።।][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+[.。。・・︒។։။۔።।][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+|[^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+([\u0020\u00A0][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+){1,3}[.。。・・︒។։။۔።।][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+([\u0020\u00A0][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+){1,3}[.。。・・︒។։။۔።।][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+([\u0020\u00A0][^0-9`~!@#$%^&*()+\-_=[{\]}\\|'<,.>?/";:£§º©®\s]+){1,3})$/;a.test(this.currentSearchTerm.trim())&&(this.avMode=o.WHAT3WORDS,this.currentSearchTerm=this.currentSearchTerm.trim()),(a=/^\d{12}|\d{8}$/).test(this.currentSearchTerm.trim())&&(this.avMode=o.UDPRN,this.currentSearchTerm=this.currentSearchTerm.trim()),this.events.trigger("pre-search",this.currentSearchTerm),this.lastSearchTerm=this.currentSearchTerm,this.searchSpinner.hide(),this.searchSpinner.show();var r=void 0,n=void 0,l=void 0,c=void 0;switch(this.avMode){case o.WHAT3WORDS:c=this.generateLookupDataForApiCall(this.getWhat3WordsLookupValue(this.currentSearchTerm,!0),d.WHAT3WORDS.key),r=this.baseUrl+this.lookupV2Endpoint,n=[],l=this.picklist.showWhat3Words;break;case o.UDPRN:this.returnAddresses=!0,c=this.generateLookupDataForApiCall(this.currentSearchTerm,d.UDPRN.key),r=this.baseUrl+this.lookupV2Endpoint,n=[{key:"Add-Addresses",value:!0}],l=this.picklist.showLookup;break;case o.LOOKUPV2:var u=this.currentSearchTerm.split(",");this.lookupType=u[0],this.returnAddresses="true"===u[1];var p=u[2];c=this.generateLookupDataForApiCall(p.trim(),this.lookupType),r=this.baseUrl+this.lookupV2Endpoint,n=[{key:"Add-Addresses",value:!0}],l=this.picklist.showLookup;break;default:c=this.generateSearchDataForApiCall(),r=this.baseUrl+(this.searchType===e.VALIDATE?this.validateEndpoint:this.searchEndpoint),n=this.searchType===e.VALIDATE?[{key:"Add-Components",value:!0},{key:"Add-Metadata",value:!0}]:[],l=this.searchType===e.VALIDATE?this.result.handleValidateResponse:this.picklist.show}this.request.send(r,"POST",l,c,n)}else this.lastSearchTerm!==this.currentSearchTerm&&this.picklist.hide()},t.prototype.getKey=function(e){var o=e.key;switch(o){case"Down":case"ArrowDown":return"ArrowDown";case"Up":case"ArrowUp":return"ArrowUp";case"Spacebar":case" ":return" ";case"Escape":case"Esc":return"Escape";default:return o}},t.prototype.canSearch=function(){return this.options.enabled&&""!==this.currentSearchTerm&&this.currentSearchTerm.length>3&&this.lastSearchTerm!==this.currentSearchTerm&&this.currentCountryCode&&!0===this.hasSearchInputBeenReset},t.prototype.createPicklist=function(){var o=this;this.picklist=new u,this.picklist.maxSuggestions=25,this.picklist.tabCount=-1,this.picklist.show=function(t){var s;o.picklist.items=null==t?void 0:t.result.suggestions,o.picklist.handleCommonShowPicklistLogic(),(null===(s=o.picklist.items)||void 0===s?void 0:s.length)>0?(o.picklist.refine.isNeeded(t)&&o.picklist.refine.createInput(t.result.suggestions_prompt,t.result.suggestions_key),o.searchType===e.VALIDATE&&o.picklist.displaySuggestionsHeader(),o.picklist.items.forEach((function(e){var t=o.picklist.createListItem(e);o.picklist.list.appendChild(t),o.picklist.listen(t)})),o.searchType===e.VALIDATE&&o.picklist.displayUseAddressEnteredFooter(),o.picklist.scrollIntoViewIfNeeded()):o.picklist.handleEmptyPicklist(t),o.poweredByLogo.element=o.poweredByLogo.element||o.poweredByLogo.create(o.picklist),o.events.trigger("post-picklist-create",o.picklist.items)},this.picklist.showWhat3Words=function(e){var t;o.picklist.what3wordsItems=null==e?void 0:e.result.suggestions,o.picklist.handleCommonShowPicklistLogic(),(null===(t=o.picklist.what3wordsItems)||void 0===t?void 0:t.length)>0?(o.picklist.what3wordsItems.forEach((function(e){var t=o.picklist.createWhat3WordsListItem(e);o.picklist.list.appendChild(t),o.picklist.listen(t)})),o.picklist.scrollIntoViewIfNeeded()):o.picklist.handleEmptyPicklist(e),o.poweredByLogo.element=o.poweredByLogo.element||o.poweredByLogo.create(o.picklist),o.events.trigger("post-picklist-create",o.picklist.items)},this.picklist.showLookup=function(e){var t=o.returnAddresses?null==e?void 0:e.result.addresses:null==e?void 0:e.result.suggestions;o.picklist.handleCommonShowPicklistLogic(),(null==t?void 0:t.length)>0?(t.forEach((function(e){var t=o.returnAddresses?o.picklist.createLookupListItem(e):o.picklist.createLookupSuggestionListItem(e);o.picklist.list.appendChild(t),o.picklist.listen(t)})),o.picklist.scrollIntoViewIfNeeded()):o.picklist.handleEmptyPicklist(e),o.poweredByLogo.element=o.poweredByLogo.element||o.poweredByLogo.create(o.picklist),o.events.trigger("post-picklist-create",o.picklist.items)},this.picklist.handleCommonShowPicklistLogic=function(){var e;o.picklist.currentItem=null,o.picklist.size=null===(e=o.picklist.items)||void 0===e?void 0:e.length,o.picklist.resetTabCount(),o.searchSpinner.hide(),o.picklist.list=o.picklist.list||o.picklist.createList(),o.picklist.list.innerHTML="",o.picklist.useAddressEntered.destroy(),o.events.trigger("pre-picklist-create",o.picklist.items)},this.picklist.hide=function(){if(o.picklist.currentItem=null,o.picklist.useAddressEntered.destroy(),o.poweredByLogo.destroy(o.picklist),o.inputs){var t=o.searchType===e.SINGLELINE?o.inputs.length-1:0;o.inputs[t].classList.remove("showing-suggestions")}o.picklist.list&&(o.picklist.container.remove(),o.picklist.list=void 0)},this.picklist.handleEmptyPicklist=function(e){var t;o.picklist.useAddressEntered.element=o.picklist.useAddressEntered.element||o.picklist.useAddressEntered.create(null===(t=e.result)||void 0===t?void 0:t.confidence),o.picklist.scrollIntoViewIfNeeded(),"function"==typeof o.picklist.handleEmptyPicklistCallback&&o.picklist.handleEmptyPicklistCallback()},this.picklist.displaySuggestionsHeader=function(){var e=document.querySelector(".picklist-suggestions-header")||document.createElement("div");e.classList.add("picklist-suggestions-header"),e.innerText="Suggestions:",o.picklist.list.parentNode.insertBefore(e,o.picklist.list)},this.picklist.displayUseAddressEnteredFooter=function(){var e=document.querySelector(".picklist-use-entered-container")||document.createElement("div");e.classList.add("picklist-use-entered-container"),o.picklist.list.parentNode.insertBefore(e,o.picklist.list.nextElementSibling);var t=document.querySelector(".picklist-use-entered-header")||document.createElement("div");t.classList.add("picklist-use-entered-header"),t.innerText="Or use address entered:",e.appendChild(t);var s=document.querySelector(".picklist-use-entered-option")||document.createElement("div");s.classList.add("picklist-use-entered-option"),s.innerText=o.currentSearchTerm.replace(/,+/g,", "),s.addEventListener("click",o.picklist.useAddressEntered.click),e.appendChild(s)},this.picklist.scrollIntoViewIfNeeded=function(){var e=o.picklist.container.getBoundingClientRect().top<0,t=o.picklist.container.getBoundingClientRect().bottom>window.innerHeight;(e||t)&&o.picklist.container.scrollIntoView()},this.picklist.useAddressEntered={element:null,create:function(e){var t={text:"".concat(e," ").concat(o.options.useAddressEnteredText)},s=o.picklist.createListItem(t);return s.classList.add("use-address-entered"),s.setAttribute("title","Enter address manually"),o.picklist.list=o.picklist.list||o.picklist.createList(),o.picklist.list.parentNode.insertBefore(s,o.picklist.container.firstChild),s.addEventListener("click",o.picklist.useAddressEntered.click),s},destroy:function(){o.picklist.useAddressEntered.element&&(o.picklist.list.parentNode.removeChild(o.picklist.useAddressEntered.element),o.picklist.useAddressEntered.element=void 0)},click:function(){var e={result:{confidence:"No matches",address:{address_line_1:"",address_line_2:"",address_line_3:"",locality:"",region:"",postal_code:"",country:""}}};if(o.currentSearchTerm){var t=o.currentSearchTerm.split(",");t[0]&&(e.result.address.address_line_1=t[0]),t[1]&&(e.result.address.address_line_2=t[1]),t[2]&&(e.result.address.address_line_3=t[2]);for(var s=3;si.length-1&&(o.picklist.tabCount=0,t=!0);var a=i[o.picklist.tabCount],d=o.picklist.list.querySelector(".selected");d&&d.classList.remove("selected"),a.classList.add("selected"),o.picklist.currentItem=a;var r=o.picklist.list.offsetTop,n=o.picklist.list.offsetTop+o.picklist.list.offsetHeight,l=o.picklist.list.scrollTop,c=a.offsetTop,u=a.offsetTop+a.offsetHeight,p=a.offsetHeight;t?o.picklist.list.scrollTop=0:s?o.picklist.list.scrollTop=999:u+p>n?o.picklist.list.scrollTop=l+p:c-p-r";t=t.substring(0,o[s][0])+i+t.substring(o[s][1])}return t},this.picklist.listen=function(e){e.addEventListener("click",o.picklist.pick.bind(null,e))},this.picklist.checkEnter=function(e){if("Enter"===e.key||"Tab"===e.key){var t=void 0;1===o.picklist.size?t=o.picklist.list.querySelectorAll("div")[0]:o.picklist.currentItem&&(t=o.picklist.currentItem),t&&o.picklist.pick(t)}},this.picklist.pick=function(t){if(o.events.trigger("post-picklist-selection",t),t.classList.contains(d.WHAT3WORDS.key)){var s=t.getElementsByTagName("div");o.lookup(s[0].innerHTML)}else e.LOOKUPV2!==o.searchType||o.returnAddresses?t.getAttribute("format")?o.format(t.getAttribute("format")):o.refine(t.getAttribute("refine")):o.formatLookupLocalityWithoutAddresses(t)}},t.prototype.formatLookupLocalityWithoutAddresses=function(e){this.result.updateAddressLine("locality",e.getAttribute("town_name"),"address-line-input"),this.result.updateAddressLine("region",e.getAttribute("region_name"),"address-line-input"),this.result.updateAddressLine("postal_code",e.getAttribute("postal_code_name"),"address-line-input"),this.result.updateAddressLine("country",e.getAttribute("country"),"address-line-input");var o=d.POSTAL_CODE.key===this.lookupType?"postal_code_key":"locality_key";this.result.createSearchAgainLink(),this.events.trigger("post-formatting-lookup",e.getAttribute(o),e)},t.prototype.format=function(e){this.events.trigger("pre-formatting-search",e),this.searchSpinner.hide(),this.request.send(e,"GET",this.result.show,void 0,[{key:"Add-Components",value:!0},{key:"Add-Metadata",value:!0}])},t.prototype.refine=function(e){this.events.trigger("pre-refinement",e),this.searchSpinner.hide(),this.request.send("".concat(this.baseUrl).concat(this.stepInEndpoint,"/").concat(e),"GET",this.picklist.show)},t.prototype.lookup=function(e){this.events.trigger("pre-lookup",e),this.searchSpinner.hide();var o=this.generateLookupDataForApiCall(e,d.WHAT3WORDS.key),t=this.baseUrl+this.lookupV2Endpoint,s=this.picklist.showLookup;this.request.send(t,"POST",s,o,[{key:"Add-Addresses",value:!0}])},t.prototype.populateResponseToMap=function(e,o,t,s){if(e)for(var i=function(e,i){if(!o.has(e))return"continue";var d=o.get(e);if(t&&t.has(e)){var r=t.get(e),n=Object.values(r).find((function(e){return e.id===i}));n&&a.tooltipDescriptionMap.set(d,n.title)}s.set(d,i)},a=this,d=0,r=e;de.classList.remove("search-type-selected"))),e.currentTarget.classList.add("search-type-selected"),address.setSearchType(e.currentTarget.dataset.panelType)}address.events.on("post-datasets-update",(function(){let e=options.elements.countryList,t=e.getElementsByTagName("option");Array.from(t).filter((e=>"Please select"!==e.innerText)).forEach((e=>e.remove()));let s=address.countryDropdown;for(const t of s){const s=document.createElement("option");s.setAttribute("value",t.iso3Code),s.innerText=t.country,e.append(s)}})),address.events.on("pre-formatting-search",(function(){document.querySelector(".loader").classList.remove("hidden")})),address.events.on("post-formatting-search",(function(e){document.querySelector(".loader").classList.add("hidden"),document.querySelector("#validated-address-info").classList.remove("hidden"),"No matches"===e.result.confidence&&"autocomplete"!==address.searchType||(document.querySelector(".formatted-address").classList.remove("hidden"),document.querySelectorAll(".formatted-address .hidden").forEach((e=>e.classList.remove("hidden"))),document.querySelector(".promptset").classList.add("hidden")),populateMetadata(e)})),address.events.on("post-formatting-lookup",(function(e,t){document.querySelector(".loader").classList.add("hidden"),document.querySelector("#validated-address-info").classList.add("hidden"),document.querySelectorAll(".formatted-address").forEach((e=>e.classList.remove("hidden"))),document.querySelector(".promptset").classList.add("hidden"),address.getLookupEnrichmentData(e),document.querySelector(".metadata").classList.remove("invisible")})),address.events.on("post-reset",(function(){document.querySelector(".formatted-address").classList.add("hidden"),resetMetadata(),document.querySelector(".promptset").classList.remove("hidden"),"lookupv2"===address.searchType&&(document.getElementById("address-input-0").getElementsByTagName("option")[0].selected="true",document.getElementById("address-input-1").getElementsByTagName("option")[0].selected="true")})),address.events.on("request-error-400",(function(){document.querySelector(".loader").classList.add("hidden")})),address.events.on("request-error-401",(function(){document.querySelector("main").classList.add("inactive"),document.querySelector(".token-prompt").classList.remove("hidden")})),address.events.on("post-promptset-check",(function(e){const t=[];let s=document.querySelector(".error-display");s.classList.contains("hidden")||(s.classList.add("hidden"),document.querySelector(".promptset").classList.remove("hidden")),document.querySelector(".address-field-inputs").innerHTML="",e.result.lines.forEach(((e,s)=>{const d=document.createElement("label");let o;d.setAttribute("for",`address-input-${s}`),d.innerText=e.prompt,e.dropdown_options?(o=document.createElement("select"),o.classList.add("address-input"),o.setAttribute("id",`address-input-${s}`),e.dropdown_options.forEach((e=>{const t=document.createElement("option");t.setAttribute("value",e.key),t.innerText=e.display,o.append(t)}))):(o=document.createElement("input"),o.classList.add("address-input"),o.setAttribute("type","text"),o.setAttribute("id",`address-input-${s}`),e.suggested_input_length&&o.setAttribute("size",e.suggested_input_length),e.example&&o.setAttribute("placeholder",e.example)),t.push(o),document.querySelector(".address-field-inputs").append(d,o)})),address.setInputs(t),document.querySelector("button#find-address-button").classList["autocomplete"!==address.searchType?"remove":"add"]("hidden")})),address.events.on("error-display",(function(e){document.querySelector(".promptset").classList.add("hidden"),resetMetadata(),document.querySelectorAll(".formatted-address").forEach((e=>e.classList.add("hidden")));let t=document.querySelector(".error-display");t.classList.remove("hidden"),t.getElementsByTagName("label")[0].innerText=e})),document.querySelectorAll(".search-type-selector").forEach((e=>e.addEventListener("click",togglePanel))); \ No newline at end of file diff --git a/dist/lib/address-search.d.ts b/dist/lib/address-search.d.ts index b6802d2..24bb552 100644 --- a/dist/lib/address-search.d.ts +++ b/dist/lib/address-search.d.ts @@ -1,14 +1,29 @@ import Request from './request'; -import { AddressSearchOptions, AddressValidationSearchType, AddressValidationMode } from './search-options'; +import { AddressSearchOptions, AddressValidationMode, AddressValidationSearchType } from './search-options'; +import { EnrichmentDetails } from './class-types'; export default class AddressValidation { options: AddressSearchOptions; searchType: AddressValidationSearchType; avMode: AddressValidationMode; events: any; request: Request; + countryDropdown: { + country: string; + iso3Code: string; + iso2Code: string; + datasetCode: string; + searchType: string; + }[]; + componentsCollectionMap: Map; + metadataCollectionMap: Map; + geocodes: EnrichmentDetails; + cvHousehold: EnrichmentDetails; + tooltipDescriptionMap: Map; + premiumLocationInsightMap: Map; private baseUrl; + private datasetsEndpoint; private searchEndpoint; - private lookupEndpoint; + private lookupV2Endpoint; private validateEndpoint; private promptsetEndpoint; private stepInEndpoint; @@ -18,7 +33,10 @@ export default class AddressValidation { private inputs; private lastSearchTerm; private currentSearchTerm; + private lookupType; + private returnAddresses; private currentCountryCode; + private currentCountryName; private currentDataSet; private hasSearchInputBeenReset; private countryCodeMapping; @@ -28,9 +46,10 @@ export default class AddressValidation { constructor(options: AddressSearchOptions); setToken(token: string): void; setSearchType(searchType: AddressValidationSearchType): void; + getLookupEnrichmentData(key: string): void; getEnrichmentData(globalAddressKey: string): void; + private callEnrichment; private setup; - private handleEnrichmentResult; private getParameter; private get token(); private mergeDefaultOptions; @@ -40,6 +59,7 @@ export default class AddressValidation { setInputs(inputs?: HTMLInputElement[]): void; private registerInputs; private setCountryList; + private handleDatasetsResponse; private handleCountryListChange; private generateSearchDataForApiCall; private generateLookupDataForApiCall; @@ -50,10 +70,12 @@ export default class AddressValidation { private canSearch; private poweredByLogo; private createPicklist; + private formatLookupLocalityWithoutAddresses; private format; private refine; private lookup; private result; + private populateResponseToMap; private checkTab; private searchSpinner; private toggleSearchInputs; diff --git a/dist/lib/class-types.d.ts b/dist/lib/class-types.d.ts index dae381c..555edd8 100644 --- a/dist/lib/class-types.d.ts +++ b/dist/lib/class-types.d.ts @@ -19,6 +19,7 @@ export declare class Picklist { createList: () => HTMLDivElement; createListItem: (item: PicklistItem) => HTMLDivElement; createLookupListItem: (item: LookupAddress) => HTMLDivElement; + createLookupSuggestionListItem: (item: LookupSuggestion) => HTMLDivElement; createWhat3WordsListItem: (item: What3WordsPickList) => HTMLDivElement; tabCount: number; resetTabCount: () => void; @@ -47,6 +48,7 @@ export declare class AddressValidationResult { createSearchAgainLink: () => void; renderInputList: (inputArray: any) => void; handleValidateResponse: (response: SearchResponse) => void; + handleEnrichmentResponse: (response: EnrichmentResponse) => void; } declare class CreateAddressLine { input: (key: string, value: string, className: string) => HTMLDivElement; @@ -61,6 +63,12 @@ export interface SearchResponse { address?: { [key: string]: string; }; + components?: { + [key: string]: string; + }; + }; + metadata?: { + [key: string]: string; }; } export interface LookupW3WResponse { @@ -74,9 +82,32 @@ export interface LookupV2Response { result?: { more_results_available: boolean; confidence: string; + suggestions: LookupSuggestion[]; addresses: LookupAddress[]; }; } +export interface LookupSuggestion { + locality: LocalityComponents; + postal_code: PostalCode; + postal_code_key: string; + locality_key: string; +} +export interface LocalityComponents { + region: LocalityItem; + sub_region: LocalityItem; + town: LocalityItem; + district: LocalityItem; + sub_district: LocalityItem; +} +export interface LocalityItem { + name: string; + code: string; +} +export interface PostalCode { + full_name: string; + primary: string; + secondary: string; +} export interface LookupAddress { text: string; global_address_key: string; @@ -99,6 +130,57 @@ export interface PicklistItem { Value: string; }[]; } +export declare class EnrichmentDetails { + title: string; + detailsMap: Map; +} +export interface EnrichmentResponse { + result?: { + aus_regional_geocodes?: { + [key: string]: string; + }; + aus_cv_household?: { + [key: string]: string; + }; + nzl_regional_geocodes?: { + [key: string]: string; + }; + nzl_cv_household?: { + [key: string]: string; + }; + usa_regional_geocodes?: { + [key: string]: string; + }; + uk_location_essential?: { + [key: string]: string; + }; + what3words?: What3Words; + geocodes?: { + [key: string]: string; + }; + premium_location_insight?: { + [key: string]: string; + }; + }; +} +export interface What3Words { + latitude?: string; + longitude?: string; + name?: string; + description?: string; +} +export interface DatasetsResponse { + result?: DatasetsCountryResult[]; +} +export interface DatasetsCountryResult { + country_iso_3?: string; + country_name?: string; + datasets?: Dataset[]; +} +export interface Dataset { + id?: string; + name?: string; +} export declare class UseAddressEntered { element: HTMLElement; create: (confidence: string) => HTMLDivElement; diff --git a/dist/lib/consumer-view-description.d.ts b/dist/lib/consumer-view-description.d.ts new file mode 100644 index 0000000..815f21a --- /dev/null +++ b/dist/lib/consumer-view-description.d.ts @@ -0,0 +1,55 @@ +export declare const consumerViewDescriptions: { + AUS: { + mosaic_group: { + id: string; + title: string; + description: string; + }[]; + mosaic_type: { + id: string; + title: string; + description: string; + }[]; + }; + NZL: { + adults_at_address: { + id: string; + title: string; + description: string; + }[]; + children_at_address: { + id: string; + title: string; + description: string; + }[]; + head_of_household_age: { + id: string; + title: string; + description: string; + }[]; + head_of_household_lifestage: { + id: string; + title: string; + description: string; + }[]; + household_composition: { + id: string; + title: string; + description: string; + }[]; + mosaic_group: { + id: string; + title: string; + description: string; + }[]; + mosaic_segment: { + id: string; + title: string; + }[]; + mosaic_type_group: { + id: string; + title: string; + description: string; + }[]; + }; +}; diff --git a/dist/lib/datasets-codes.d.ts b/dist/lib/datasets-codes.d.ts index 9e216b5..8ddd6c1 100644 --- a/dist/lib/datasets-codes.d.ts +++ b/dist/lib/datasets-codes.d.ts @@ -1,13 +1,7 @@ -export declare const datasetCodes: ({ +export declare const datasetCodes: { country: string; iso3Code: string; iso2Code: string; datasetCode: string; searchType: string; -} | { - country: string; - iso3Code: string; - iso2Code: string; - datasetCode: string[]; - searchType: string; -})[]; +}[]; diff --git a/dist/lib/enrichment-output.d.ts b/dist/lib/enrichment-output.d.ts new file mode 100644 index 0000000..21e49db --- /dev/null +++ b/dist/lib/enrichment-output.d.ts @@ -0,0 +1,177 @@ +export declare const enrichmentOutput: { + AUS: { + geocodes_title: string; + aus_regional_geocodes: { + latitude: string; + longitude: string; + match_level: string; + sa1: string; + meshblock: string; + lga_code: string; + lga_name: string; + street_pid: string; + locality_pid: string; + geocode_level_code: string; + geocode_level_description: string; + geocode_type_code: string; + geocode_type_description: string; + highest_level_longitude: string; + highest_level_latitude: string; + highest_level_geocode_reliability_code: string; + highest_level_geocode_reliability_description: string; + confidence_level_code: string; + confidence_level_description: string; + "2016_meshblock_id": string; + "2016_meshblock_code": string; + "2016_meshblock_match_code": string; + "2016_meshblock_match_description": string; + collector_district_id: string; + collector_district_code: string; + commonwealth_electoral_boundary_id: string; + commonwealth_electoral_boundary_name: string; + statistical_local_area_id: string; + statistical_local_area_code: string; + statistical_local_area_name: string; + state_electoral_boundary_id: string; + state_electoral_boundary_name: string; + state_electoral_effective_start: string; + state_electoral_effective_end: string; + state_electoral_new_pid: string; + state_electoral_new_name: string; + state_electoral_new_effective_start: string; + address_level_longitude: string; + address_level_latitude: string; + address_level_geocode_reliability_code: string; + address_level_geocode_reliability_description: string; + street_level_longitude: string; + street_level_latitude: string; + street_level_boundary_extent: string; + street_level_geocode_reliability_code: string; + street_level_geocode_reliability_description: string; + locality_level_longitude: string; + locality_level_latitude: string; + locality_level_geocode_reliability_code: string; + locality_level_geocode_reliability_description: string; + gnaf_legal_parcel_identifier: string; + locality_class_code: string; + }; + cv_household_title: string; + aus_cv_household: { + address: string; + adults_at_address_code: string; + adults_at_address_description: string; + affluence_code: string; + affluence_description: string; + channel_preference: string; + channel_preference_description: string; + children_at_address_code_0_10_years: string; + children_at_address_code_11_18_years: string; + children_at_address_description_0_10_years: string; + children_at_address_description_11_18_years: string; + credit_demand_code: string; + credit_demand_description: string; + gnaf_latitude: string; + gnaf_longitude: string; + gnaf_pid: string; + head_of_household_age_code: string; + head_of_household_age_description: string; + hin: string; + household_composition_code: string; + household_composition_description: string; + household_income_code: string; + household_income_description: string; + length_of_residence_code: string; + length_of_residence_description: string; + lifestage_code: string; + lifestage_description: string; + local_government_area_code: string; + local_government_area_name: string; + meshblock: string; + mosaic_group: string; + mosaic_type: string; + postcode: string; + residential_flag: string; + risk_insight_code: string; + risk_insight_description: string; + sa1: string; + state: string; + suburb: string; + }; + }; + NZL: { + geocodes_title: string; + nzl_regional_geocodes: { + front_of_property_nztm_x_coordinate: string; + front_of_property_nztm_y_coordinate: string; + centroid_of_property_nztm_x_coordinate: string; + centroid_of_property_nztm_y_coordinate: string; + front_of_property_latitude: string; + front_of_property_longitude: string; + centroid_of_property_latitude: string; + centroid_of_property_longitude: string; + linz_parcel_id: string; + property_purpose_type: string; + addressable: string; + mesh_block_code: string; + territorial_authority_code: string; + territorial_authority_name: string; + regional_council_code: string; + regional_council_name: string; + general_electorate_code: string; + general_electorate_name: string; + maori_electorate_code: string; + maori_electorate_name: string; + match_level: string; + }; + cv_household_title: string; + nzl_cv_household: { + adults_at_address: string; + children_at_address: string; + head_of_household_age: string; + head_of_household_lifestage: string; + household_composition: string; + mosaic_group: string; + mosaic_segment: string; + mosaic_type_group: string; + }; + }; + USA: { + geocodes_title: string; + usa_regional_geocodes: { + latitude: string; + longitude: string; + match_level: string; + census_tract: string; + census_block: string; + core_based_statistical_area: string; + congressional_district_code: string; + county_code: string; + }; + }; + GBR: { + geocodes_title: string; + uk_location_essential: { + latitude: string; + longitude: string; + match_level: string; + udprn: string; + uprn: string; + x_coordinate: string; + y_coordinate: string; + }; + what3words: { + latitude: string; + longitude: string; + name: string; + description: string; + }; + }; + GLOBAL: { + geocodes_title: string; + geocodes: { + latitude: string; + longitude: string; + match_level: string; + }; + }; +}; diff --git a/dist/lib/regional-geocodes-description.d.ts b/dist/lib/regional-geocodes-description.d.ts new file mode 100644 index 0000000..0416df6 --- /dev/null +++ b/dist/lib/regional-geocodes-description.d.ts @@ -0,0 +1,13 @@ +export declare const regionalGeocodeDescriptions: { + AUS: { + locality_class_code: ({ + id: string; + title: string; + description?: undefined; + } | { + id: string; + title: string; + description: string; + })[]; + }; +}; diff --git a/dist/lib/search-options.d.ts b/dist/lib/search-options.d.ts index 668ebe8..8997ba5 100644 --- a/dist/lib/search-options.d.ts +++ b/dist/lib/search-options.d.ts @@ -43,16 +43,50 @@ export interface AddressSearchOptions { export declare enum AddressValidationSearchType { AUTOCOMPLETE = "autocomplete", SINGLELINE = "singleline", - VALIDATE = "validate" + VALIDATE = "validate", + LOOKUPV2 = "lookupv2" } export declare enum AddressValidationMode { SEARCH = 1, WHAT3WORDS = 2, - UDPRN = 3 + UDPRN = 3, + LOOKUPV2 = 4 } -export declare enum AddressValidationLookupKeywords { - WHAT3WORDS = "what3words", - UDPRN = "udprn" +export declare const AddressValidationLookupKeywords: { + LOCALITY: { + key: string; + display: string; + }; + POSTAL_CODE: { + key: string; + display: string; + }; + UDPRN: { + key: string; + display: string; + }; + WHAT3WORDS: { + key: string; + display: string; + }; +}; +export declare const AddAddressesOptions: { + TRUE: { + key: string; + display: string; + }; + FALSE: { + key: string; + display: string; + }; +}; +export declare enum AddressValidationConfidenceType { + NO_MATCHES = "No matches", + VERIFIED_MATCH = "Verified match", + INTERACTION_REQUIRED = "Interaction required", + PREMISES_PARTIAL = "Premises partial", + STREET_PARTIAL = "Street partial", + MULTIPLE_MATCHES = "Multiple matches" } export declare const defaults: { avMode: AddressValidationMode; diff --git a/index.html b/index.html index f71d05d..2ca489b 100644 --- a/index.html +++ b/index.html @@ -35,247 +35,10 @@

Experian Address Validation

- + @@ -301,6 +64,13 @@
Enter partial address, then get results
Singleline search is designed to find an exact or close match to an address based on two or three key address elements.
+ @@ -333,15 +103,51 @@
Enter partial address, then get results
+ +
- + + diff --git a/src/css/experian-address-validation.css b/src/css/experian-address-validation.css index f0e5f9c..aeb4183 100644 --- a/src/css/experian-address-validation.css +++ b/src/css/experian-address-validation.css @@ -8,6 +8,63 @@ display: none; } +h2, h3{ + display:inline-block; +} + +.collapsible { + padding-left: 2px; +} + +.tab { + display: inline-block; + margin-left: var(--spaces); +} + +.tooltip { + position: relative; + display: inline-block; + border-bottom: 1px dotted black; +} + +.tooltip .tooltiptext { + visibility: hidden; + width: 250px; + background-color: #406eb3; + color: #fff; + text-align: center; + border-radius: 6px; + padding: 5px 0; + position: absolute; + z-index: 1; + bottom: 125%; + left: 50%; + margin-left: -60px; + opacity: 0; + transition: opacity 0.3s; +} + +.tooltip .tooltiptext::after { + content: ""; + position: absolute; + top: 100%; + left: 50%; + margin-left: -5px; + border-width: 5px; + border-style: solid; + border-color: #406eb3 transparent transparent transparent; +} + +.tooltip:hover .tooltiptext { + visibility: visible; + opacity: 1; +} + +.error-display .error-msg{ + color: red; + font-weight: bold; +} + /* Loading spinner styles */ @-webkit-keyframes spinner { 0% { diff --git a/src/js/address-metadata-display.js b/src/js/address-metadata-display.js new file mode 100644 index 0000000..a925d5e --- /dev/null +++ b/src/js/address-metadata-display.js @@ -0,0 +1,300 @@ +// Display a map with the lat/long details after a data enrichment lookup +address.events.on("post-enrichment", function (data) { + let enrichmentElement = document.querySelector("#enrichment"); + if (address.geocodes.detailsMap.size > 0 || (data.result.what3words && data.result.what3words.latitude)) { + document.querySelector(".metadata #what3words-key").classList.add("hidden"); + document.querySelector(".metadata #what3words-value").classList.add("hidden"); + + enrichmentElement.classList.remove("hidden"); + // populate cv household attributes + populateAddressAdditionalInfo(address.cvHousehold.detailsMap, enrichmentElement, address.cvHousehold.title, 1); + + // populate geocodes attributes + populateAddressAdditionalInfo(address.geocodes.detailsMap, enrichmentElement, address.geocodes.title, 2); + + let w3wLat, w3wLong, w3wLatLong; + if (data.result.what3words && data.result.what3words.latitude) { + document.querySelector(".metadata #what3words-key").classList.remove("hidden"); + document.querySelector(".metadata #what3words-value").classList.remove("hidden"); + document.querySelector(".metadata #what3words-value").innerHTML = '///' + data.result.what3words.name; + + w3wLat = data.result.what3words.latitude; + w3wLong = data.result.what3words.longitude; + w3wLatLong = [w3wLat, w3wLong]; + } + + let geoLat, geoLong, geoLatLong; + if (data.result.nzl_regional_geocodes) { + geoLat = address.geocodes.detailsMap.get("Centroid of Property Latitude"); + geoLong = address.geocodes.detailsMap.get("Centroid of Property Longitude") + } else { + geoLat = address.geocodes.detailsMap.get("Latitude"); + geoLong = address.geocodes.detailsMap.get("Longitude") + } + if (geoLat && geoLong) { + geoLatLong = [geoLat, geoLong]; + } + + var zoom = 16; + var attribution = '© OpenStreetMap contributors'; + + // Define a custom icon for what3words + var w3wIcon = L.icon({ + iconUrl: './dist/images/w3w.loc.png', + iconSize: [30, 37], // size of the icon + iconAnchor: [15, 36], // point of the icon which will correspond to marker's location + popupAnchor: [0, -20] // point from which the popup should open relative to the iconAnchor + }); + + if (w3wLatLong || geoLatLong) { + document.querySelector("#map").classList.remove("hidden"); + // Instantiate a new map + if (!addressValidationMap) { + // The hardcoded coordinated are needed to initialize the map. Will be overwritten with the what3words and geocode markers. + addressValidationMap = L.map('map').setView([51.500264, 0.633506], zoom); + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {attribution}).addTo(addressValidationMap); + } else { + // Update the previous map instance by removing any existing markers + if (addressValidationW3wMarker) { + addressValidationW3wMarker.remove(); + } + + if (addressValidationGeoMarker) { + addressValidationGeoMarker.remove(); + } + } + + // Add new markers for location insight datasets + var markerArray = []; + if (w3wLatLong) { + addressValidationMap.panTo(w3wLatLong, {duration: 1}); + addressValidationW3wMarker = L.marker(w3wLatLong, {icon: w3wIcon}).addTo(addressValidationMap); + markerArray.push(addressValidationW3wMarker); + } + + if (geoLatLong) { + addressValidationMap.panTo(geoLatLong, {duration: 1}); + addressValidationGeoMarker = L.marker(geoLatLong).addTo(addressValidationMap); + markerArray.push(addressValidationGeoMarker); + } + + // Ensure all markers fit onto the map + var group = L.featureGroup(markerArray); + addressValidationMap.fitBounds(group.getBounds().pad(0.25)); + } + } + // populate premium location insight + if (address.premiumLocationInsightMap.size > 0) { + enrichmentElement.classList.remove("hidden"); + populateAddressAdditionalInfo(address.premiumLocationInsightMap, enrichmentElement, "Premium Location Insight", 3); + } +}); + +// Display and populate the "metadata" container +function populateMetadata(data) { + // Try and get some geocoded enrichment data + address.getEnrichmentData(data.result.global_address_key); + + const confidence = data.result.confidence; + if (confidence) { + document.querySelector(".metadata #confidence-key").innerText = confidence === 'Verified match' ? '✔' : '❌'; + document.querySelector(".metadata #confidence-value").innerText = confidence; + } + + if (data.metadata && data.metadata.address_classification) { + const deliveryType = data.metadata.address_classification.delivery_type; + if (deliveryType) { + document.querySelector(".metadata #delivery-type-key").innerText = deliveryType === 'residential' ? '🏡' : '🏢'; + document.querySelector(".metadata #delivery-type-value").innerText = deliveryType.substring(0, 1).toUpperCase() + deliveryType.substring(1); + } + } + + document.querySelector(".metadata #delivery-address-key").innerHTML = data.result.address ? '' : ''; + document.querySelector(".metadata #delivery-address-value").innerHTML = data.result.address ? Object.values(data.result.address).filter(line => line !== "").join("
") : ''; + document.querySelector(".metadata").classList.remove("invisible"); + + populateAddressAdditionalInfo(address.componentsCollectionMap, document.querySelector("#components-collection")); + populateAddressAdditionalInfo(address.metadataCollectionMap, document.querySelector("#metadata-collection")); +} + +// Method to reuse to populate the address additional info. Eg: Address components, Address metadata, and enrichment data. +function populateAddressAdditionalInfo(collectionMap, parentElement, elementTitle, collapsibleIndex) { + if (collectionMap.size > 0) { + let enrichmentDivContentElement = parentElement.getElementsByClassName("content")[0]; + parentElement.classList.remove("hidden"); + let divContentElement = enrichmentDivContentElement; + + // create child element(eg: CV, Geocodes and Premium Location Insight) under Enrichment + if (elementTitle) { + let categoryDivElement = document.createElement("div"); + const headerElement = document.createElement("h3"); + headerElement.innerText = elementTitle; + categoryDivElement.append(headerElement); + if (collapsibleIndex) { + let spanElement = document.createElement("span"); + spanElement.classList.add("collapsible"); + createCollapsibleELement(spanElement, collapsibleIndex); + + let childDivElement = document.createElement("div"); + childDivElement.classList.add('content'); + childDivElement.setAttribute('style', "display: none;"); + divContentElement = childDivElement; + categoryDivElement.append(spanElement, childDivElement); + } + enrichmentDivContentElement.append(categoryDivElement); + } + populateContent(collectionMap, divContentElement) + } +} + +// to create collapsible child elements(CV, Geocodes and Premium Location Insight) under Enrichment +function createCollapsibleELement(parentSpanElement, collapsibleIndex) { + let hideSpanElement = document.createElement("span"); + hideSpanElement.innerText = "[Hide]"; + hideSpanElement.classList.add("hide" + `${collapsibleIndex}`); + hideSpanElement.classList.add("hidden"); + + let showSpanElement = document.createElement("span"); + showSpanElement.innerText = "[Show]"; + showSpanElement.classList.add("show" + `${collapsibleIndex}`); + + parentSpanElement.append(hideSpanElement, showSpanElement); + // to add event listener to the Hide & Show elements + addCollapsibleEventListener(parentSpanElement, ".hide" + `${collapsibleIndex}`, ".show" + `${collapsibleIndex}`) +} + +// to populate the address information from collectionMap into the divElement +function populateContent(collectionMap, divElement) { + collectionMap.forEach((value, key) => { + const htmlSpanElement = document.createElement("span"); + let htmlBrElement = document.createElement("br"); + if (typeof value == "object") { + htmlSpanElement.innerText = `${key}: `; + divElement.append(htmlSpanElement, htmlBrElement); + addChildElement(Object.entries(value), divElement, 1, true) + } else { + // to add tooltip description for each entry from tooltipDescriptionMap + if (address.tooltipDescriptionMap.has(key)) { + let tooltipDivElement = document.createElement("div"); + tooltipDivElement.classList.add("tooltip"); + tooltipDivElement.innerText = `${value}`; + + let tooltipSpanElement = document.createElement("span"); + tooltipSpanElement.classList.add("tooltiptext"); + tooltipSpanElement.innerText = `${address.tooltipDescriptionMap.get(key)}`; + tooltipDivElement.append(tooltipSpanElement); + + htmlSpanElement.innerText = `${key}: `; + htmlSpanElement.append(tooltipDivElement); + } else { + htmlSpanElement.innerText = `${key}: ${value}`; + } + divElement.append(htmlSpanElement, htmlBrElement); + } + }); + divElement.append(document.createElement("br")); +} + +// to iterate over the entries to populate the content into divElement +function addChildElement(entries, divElement, level, addSubtitle) { + for (const [childKey, childValue] of entries) { + const htmlChildSpanElement = document.createElement("span"); + let htmlChildBrElement = document.createElement("br"); + + // to handle the indention for an entry + htmlChildSpanElement.classList.add('tab'); + htmlChildSpanElement.setAttribute("style", "--spaces: " + level * 2 + "em;"); + if (typeof childValue == "object") { + let childLevel = level; + if (addSubtitle) { + htmlChildSpanElement.innerText = `${childKey}: `; + childLevel = level + 1; + divElement.append(htmlChildSpanElement, htmlChildBrElement); + } + addChildElement(Object.entries(childValue), divElement, childLevel, + !(Array.isArray(childValue) && childValue.length === 1)); + } else { + htmlChildSpanElement.innerText = `${childKey}: ${childValue}`; + divElement.append(htmlChildSpanElement, htmlChildBrElement); + } + } +} + +// Hide the "metadata" container +function resetMetadata() { + document.querySelector(".metadata #confidence-key").innerText = ''; + document.querySelector(".metadata #confidence-value").innerText = ''; + document.querySelector(".metadata #delivery-type-key").innerText = ''; + document.querySelector(".metadata #delivery-type-value").innerText = ''; + document.querySelector(".metadata #what3words-key").classList.add("hidden"); + document.querySelector(".metadata #what3words-value").classList.add("hidden"); + + document.querySelector(".metadata").classList.add("invisible"); + + resetMetadataElements(document.getElementById("validated-address-info")); + + // to remove all components collection elements + resetMetadataElements(document.getElementById("components-collection"), true); + document.querySelector("#components-collection").classList.add("hidden"); + + // to remove all metadata collection elements + resetMetadataElements(document.getElementById("metadata-collection"), true); + document.querySelector("#metadata-collection").classList.add("hidden"); + + // to remove all enrichment elements + resetMetadataElements(document.getElementById("enrichment"), true); + document.querySelector("#enrichment").classList.add("hidden"); + + document.querySelector("#map").classList.add("hidden"); +} + +// to remove child elements that were created +function resetMetadataElements(parent, containsChildElements) { + if (containsChildElements) { + parent.querySelector(".hide").classList.add("hidden"); + parent.querySelector(".show").classList.remove("hidden"); + } + let divElements = parent.querySelectorAll(".content"); + divElements.forEach(div => { + div.style.display = containsChildElements ? "none" : "block"; + + if (containsChildElements) { + removeElements(div.getElementsByTagName("div")); + removeElements(div.getElementsByTagName("span")); + removeElements(div.getElementsByTagName("br")); + removeElements(div.getElementsByTagName("h3")); + } + }); +} + +// to remove all the elements passed +function removeElements(elementsToRemove) { + Array.from(elementsToRemove).forEach(element => element.remove()) +} + +// to handle expand and collapse +function onContentLoaded() { + let collapsibleDivs = document.querySelectorAll(".collapsible"); + collapsibleDivs.forEach(div => addCollapsibleEventListener(div, ".hide", ".show")) +} + +// to add collapsible event listener to Hide & Show +function addCollapsibleEventListener(element, hideElementName, showElementName) { + element.addEventListener('click', function () { + let nextElementSibling = this.nextElementSibling; + let parentElement = nextElementSibling.parentElement; + let hideElement = parentElement.querySelector(hideElementName); + let showElement = parentElement.querySelector(showElementName); + if (nextElementSibling.style.display === "block") { + nextElementSibling.style.display = "none"; + hideElement.classList.add("hidden"); + showElement.classList.remove("hidden"); + } else { + nextElementSibling.style.display = "block"; + hideElement.classList.remove("hidden"); + showElement.classList.add("hidden"); + } + }) +} + +document.addEventListener("DOMContentLoaded", onContentLoaded); \ No newline at end of file diff --git a/src/js/search-address-handling.js b/src/js/search-address-handling.js new file mode 100644 index 0000000..6378a4a --- /dev/null +++ b/src/js/search-address-handling.js @@ -0,0 +1,192 @@ +// Set the custom options +var options = { + searchType: 'autocomplete', + maxSuggestions: 10, + useSpinner: false, + elements: { + countryList: document.querySelector("select"), + address_line_1: document.querySelector("input[name='address_line_1']"), + address_line_2: document.querySelector("input[name='address_line_2']"), + address_line_3: document.querySelector("input[name='address_line_2']"), + locality: document.querySelector("input[name='locality']"), + region: document.querySelector("input[name='region']"), + postal_code: document.querySelector("input[name='postal_code']"), + country: document.querySelector("input[name='country']"), + lookupButton: document.querySelector("button#find-address-button") + } +}; + +// Try and read a token from localStorage +if (localStorage && localStorage.getItem('address-validation-token')) { + options.token = localStorage.getItem('address-validation-token'); +} + +// Initialise address validation +var address = new AddressValidation(options); +var addressValidationMap, addressValidationW3wMarker, addressValidationGeoMarker; + +// Accept a new token from the token prompt and set this in the AddressValidation class +function addToken() { + address.setToken(document.querySelector('[name="token"]').value); + document.querySelector('main').classList.remove('inactive'); + document.querySelector('.token-prompt').classList.add('hidden'); + + // Save the token in localStorage for next time + if (localStorage) { + localStorage.setItem('address-validation-token', document.querySelector('[name="token"]').value); + } +} + +// populate the country dataset dropdown with the authorized country datasets +address.events.on("post-datasets-update", function() { + let countryListElement = options.elements.countryList; + let optionElements = countryListElement.getElementsByTagName("option") + Array.from(optionElements).filter(option => option.innerText !== 'Please select').forEach(option => option.remove()) + + let countries = address.countryDropdown; + for (const country of countries) { + const optionElement = document.createElement("option"); + optionElement.setAttribute("value", country.iso3Code); + optionElement.innerText = country.country; + countryListElement.append(optionElement); + } +}); + +// Show the large spinner while we're searching for the formatted address +address.events.on("pre-formatting-search", function() { + document.querySelector(".loader").classList.remove("hidden"); +}); + +// Hide the large spinner when a result is found +address.events.on("post-formatting-search", function(data) { + document.querySelector(".loader").classList.add("hidden"); + document.querySelector("#validated-address-info").classList.remove("hidden"); + + if (data.result.confidence !== "No matches" || address.searchType === 'autocomplete') { + // Show the formatted address fields + document.querySelector(".formatted-address").classList.remove("hidden"); + document.querySelectorAll(".formatted-address .hidden").forEach(element => element.classList.remove("hidden")); + // Hide the promptset as we have now captured the address + document.querySelector('.promptset').classList.add('hidden'); + } + + // Populate the metadata section with more details about this address + populateMetadata(data); +}); + +address.events.on("post-formatting-lookup", function(key, item) { + document.querySelector(".loader").classList.add("hidden"); + document.querySelector("#validated-address-info").classList.add("hidden"); + document.querySelectorAll(".formatted-address").forEach(element => element.classList.remove("hidden")); + document.querySelector('.promptset').classList.add('hidden'); + + // Populate the metadata section with more details about this address + address.getLookupEnrichmentData(key); + document.querySelector(".metadata").classList.remove("invisible"); +}); + +// Hide the formatted address container again upon reset +address.events.on("post-reset", function() { + document.querySelector(".formatted-address").classList.add("hidden"); + resetMetadata(); + document.querySelector('.promptset').classList.remove('hidden'); + // to reset the Lookup type dropdown selected value + if (address.searchType === "lookupv2") { + let lookupType = document.getElementById("address-input-0"); + lookupType.getElementsByTagName("option")[0].selected = "true"; + + let addAddresses = document.getElementById("address-input-1"); + addAddresses.getElementsByTagName("option")[0].selected = "true"; + } +}); + +// Hide the loader if the request results in a 400 Bad Request error +address.events.on("request-error-400", function() { + document.querySelector(".loader").classList.add("hidden"); +}); + +// Prompt for a token if the request is unauthorised (token is invalid or missing) +address.events.on("request-error-401", function() { + document.querySelector('main').classList.add('inactive'); + document.querySelector('.token-prompt').classList.remove('hidden'); +}); + +// When the promptset is changed, update the form fields accordingly +address.events.on("post-promptset-check", function(response) { + const inputs = []; + let errorElement = document.querySelector('.error-display'); + if (!errorElement.classList.contains("hidden")) { + errorElement.classList.add('hidden'); + document.querySelector('.promptset').classList.remove('hidden'); + } + // Clear any previous address input form fields + document.querySelector('.address-field-inputs').innerHTML = ""; + + // Iterate over each new line and create a new label and input + response.result.lines.forEach((line, idx) => { + const label = document.createElement("label"); + label.setAttribute("for", `address-input-${idx}`); + label.innerText = line.prompt; + + let input; + if (line.dropdown_options) { + input = document.createElement("select"); + input.classList.add("address-input"); + input.setAttribute("id", `address-input-${idx}`); + line.dropdown_options.forEach((dropdownOption) => { + const optionElement = document.createElement("option"); + optionElement.setAttribute("value", dropdownOption.key); + optionElement.innerText = dropdownOption.display; + input.append(optionElement); + }); + } else { + input = document.createElement("input"); + input.classList.add("address-input"); + input.setAttribute("type", "text"); + input.setAttribute("id", `address-input-${idx}`); + + if (line.suggested_input_length) { + input.setAttribute("size", line.suggested_input_length); + } + + if (line.example) { + input.setAttribute("placeholder", line.example); + } + } + inputs.push(input); + + document.querySelector('.address-field-inputs').append(label, input); + }); + + // Register the event listeners on the new inputs + address.setInputs(inputs); + + // Hide or show a "Find address" button depending on the search type + document.querySelector("button#find-address-button").classList[ + (address.searchType !== "autocomplete") ? 'remove' : 'add']("hidden"); +}); + +// To display error when unsupported search type is selected +address.events.on("error-display", function (error) { + document.querySelector('.promptset').classList.add('hidden'); + resetMetadata(); + document.querySelectorAll('.formatted-address').forEach(element => element.classList.add('hidden')); + + let errorElement = document.querySelector('.error-display'); + errorElement.classList.remove('hidden'); + + const labelElement = errorElement.getElementsByTagName('label')[0]; + labelElement.innerText = error; +}); + +/* Demo specific code */ +// Allow the user to change the search type +document.querySelectorAll('.search-type-selector').forEach(panel => panel.addEventListener('click', togglePanel)); + +function togglePanel(e) { + // Toggle which panel should be selected + document.querySelectorAll('.search-type-selector').forEach(panel => panel.classList.remove('search-type-selected')); + e.currentTarget.classList.add('search-type-selected'); + + address.setSearchType(e.currentTarget.dataset.panelType); +} \ No newline at end of file diff --git a/src/ts/address-search.ts b/src/ts/address-search.ts index 2f3cb28..bca63dc 100644 --- a/src/ts/address-search.ts +++ b/src/ts/address-search.ts @@ -1,9 +1,33 @@ import EventFactory from './event-factory'; import Request from './request'; -import { AddressSearchOptions, AddressValidationSearchType, AddressValidationMode, AddressValidationLookupKeywords, defaults } from './search-options'; -import { datasetCodes } from './datasets-codes'; -import { translations } from './translations'; -import { AddressValidationResult, LookupAddress, LookupV2Response, LookupW3WResponse, Picklist, PicklistItem, PoweredByLogo, SearchResponse, What3WordsPickList } from './class-types'; +import { + AddAddressesOptions, + AddressSearchOptions, + AddressValidationConfidenceType, + AddressValidationLookupKeywords, + AddressValidationMode, + AddressValidationSearchType, + defaults +} from './search-options'; +import {datasetCodes} from './datasets-codes'; +import {translations} from './translations'; +import { + AddressValidationResult, + DatasetsResponse, + EnrichmentDetails, + EnrichmentResponse, + LookupAddress, LookupSuggestion, + LookupV2Response, + LookupW3WResponse, + Picklist, + PicklistItem, + PoweredByLogo, + SearchResponse, + What3WordsPickList +} from './class-types'; +import {enrichmentOutput} from "./enrichment-output"; +import {consumerViewDescriptions} from "./consumer-view-description"; +import {regionalGeocodeDescriptions} from "./regional-geocodes-description"; export default class AddressValidation { public options: AddressSearchOptions; @@ -12,9 +36,18 @@ export default class AddressValidation { public events; public request: Request; + public countryDropdown: {country: string, iso3Code: string, iso2Code: string, datasetCode: string, searchType: string}[] = []; + public componentsCollectionMap = new Map(); + public metadataCollectionMap = new Map(); + public geocodes: EnrichmentDetails = new EnrichmentDetails(); + public cvHousehold: EnrichmentDetails = new EnrichmentDetails(); + public tooltipDescriptionMap = new Map(); + public premiumLocationInsightMap = new Map(); + private baseUrl = 'https://api.experianaperture.io/'; + private datasetsEndpoint = 'address/datasets/v1'; private searchEndpoint = 'address/search/v1'; - private lookupEndpoint = 'address/lookup/v2'; + private lookupV2Endpoint = 'address/lookup/v2'; private validateEndpoint = 'address/validate/v1'; private promptsetEndpoint = 'address/promptsets/v1'; private stepInEndpoint = 'address/suggestions/stepin/v1'; @@ -25,7 +58,10 @@ export default class AddressValidation { private inputs: HTMLInputElement[]; private lastSearchTerm: string; private currentSearchTerm: string; + private lookupType: string; + private returnAddresses: boolean; private currentCountryCode: string; + private currentCountryName: string; private currentDataSet: string | string[]; private hasSearchInputBeenReset: boolean; private countryCodeMapping; @@ -53,24 +89,75 @@ export default class AddressValidation { this.events.trigger('post-search-type-change', searchType); } + public getLookupEnrichmentData(key: string) { + if (key) { + let regionalAttributes = { + geocodes: Object.keys(enrichmentOutput.GLOBAL.geocodes), + premium_location_insight: {} = [ + "geocodes", + "geocodes_building_xy", + "geocodes_access", + "time" + ] + } + this.callEnrichment(key, regionalAttributes); + } + } + public getEnrichmentData(globalAddressKey: string) { if (globalAddressKey) { - const data = { - country_iso: this.currentCountryCode, - keys: { - global_address_key: globalAddressKey - }, - attributes: { - geocodes: ['latitude', 'longitude', 'match_level'], - what3words: this.currentCountryCode == 'GBR' ? ['latitude', 'longitude', 'name', 'description'] : null + let regionalAttributes: {}; + let premium_location_insight: {} = [ + "geocodes", + "geocodes_building_xy", + "geocodes_access", + "time" + ] + if (this.currentCountryCode == "NZL") { + regionalAttributes = { + nzl_regional_geocodes: Object.keys(enrichmentOutput.NZL.nzl_regional_geocodes), + nzl_cv_household: Object.keys(enrichmentOutput.NZL.nzl_cv_household), + premium_location_insight } - }; - - this.events.trigger('pre-enrichment'); - this.request.send(this.baseUrl + this.enrichmentEndpoint, 'POST', this.handleEnrichmentResult.bind(this), JSON.stringify(data)); + } else if (this.currentCountryCode == "AUS") { + regionalAttributes = { + aus_regional_geocodes: Object.keys(enrichmentOutput.AUS.aus_regional_geocodes), + aus_cv_household: Object.keys(enrichmentOutput.AUS.aus_cv_household), + premium_location_insight + } + } else if (this.currentCountryCode == "USA") { + regionalAttributes = { + usa_regional_geocodes: Object.keys(enrichmentOutput.USA.usa_regional_geocodes), + premium_location_insight + } + } else if (this.currentCountryCode == "GBR") { + regionalAttributes = { + uk_location_essential: Object.keys(enrichmentOutput.GBR.uk_location_essential), + what3words: Object.keys(enrichmentOutput.GBR.what3words), + premium_location_insight + } + } else { + regionalAttributes = { + geocodes: Object.keys(enrichmentOutput.GLOBAL.geocodes), + premium_location_insight + } + } + this.callEnrichment(globalAddressKey, regionalAttributes); } } + private callEnrichment(key: string, regionalAttributes) : void { + let data = { + country_iso: this.currentCountryCode, + keys: { + global_address_key: key + }, + attributes: regionalAttributes + } + this.events.trigger('pre-enrichment'); + this.request.send(this.baseUrl + this.enrichmentEndpoint, 'POST', this.result.handleEnrichmentResponse, JSON.stringify(data)); + } + private setup(): void { // Get token and proceed if it's present if (this.token) { @@ -96,10 +183,6 @@ export default class AddressValidation { } } - private handleEnrichmentResult(response) { - this.events.trigger('post-enrichment', response); - } - private getParameter(name): string { name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]'); const regex = new RegExp('[\\?&]' + name + '=([^&#]*)'), @@ -160,6 +243,16 @@ export default class AddressValidation { ]; setTimeout(() => this.handlePromptsetResult({ result: { lines } })); return; + } else if (this.searchType === AddressValidationSearchType.LOOKUPV2) { + const lines = [ + {prompt: 'Lookup type', suggested_input_length: 160, + dropdown_options: [AddressValidationLookupKeywords.LOCALITY, AddressValidationLookupKeywords.POSTAL_CODE]}, + {prompt: 'Add addresses (If "true" concrete addresses are returned in the response)', + suggested_input_length: 160, dropdown_options: Object.values(AddAddressesOptions)}, + {prompt: 'Lookup value ', suggested_input_length: 160} + ]; + setTimeout(() => this.handlePromptsetResult({result: {lines}})); + return; } const data = { @@ -170,12 +263,18 @@ export default class AddressValidation { }; this.events.trigger('pre-promptset-check'); this.request.send(this.baseUrl + this.promptsetEndpoint, 'POST', this.handlePromptsetResult.bind(this), JSON.stringify(data)); + return; } + + this.events.trigger('error-display', "Unsupported search type '" + this.searchType + "' for country dataset '" + this.currentCountryName + "'."); } } private lookupDatasetCode(): string | string[] { - const item = datasetCodes.find(dataset => dataset.iso3Code === this.currentCountryCode && dataset.searchType.includes(this.searchType)); + const item = datasetCodes.find(dataset => + dataset.iso3Code === this.currentCountryCode + && dataset.country === this.currentCountryName + && dataset.searchType.includes(this.searchType)); if (item) { return item.datasetCode; } @@ -198,7 +297,7 @@ export default class AddressValidation { this.getPromptset(); } - if (this.searchType === AddressValidationSearchType.SINGLELINE || this.searchType === AddressValidationSearchType.VALIDATE) { + if (this.searchType !== AddressValidationSearchType.AUTOCOMPLETE) { // Bind an event listener on the lookup button if (this.options.elements.lookupButton) { this.lookupFn = this.search.bind(this); @@ -238,9 +337,13 @@ export default class AddressValidation { } private setCountryList(): void { + let url = this.baseUrl + this.datasetsEndpoint; + this.request.send(url, 'GET', this.handleDatasetsResponse.bind(this)); + // Set the initial country code from either the value of a country list HTML element or a static country code if (this.options.elements.countryList) { this.currentCountryCode = this.options.elements.countryList.value; + this.currentCountryName = this.options.elements.countryList[this.options.elements.countryList.selectedIndex].label; // Listen for when a country is changed and call the promptset endpoint this.options.elements.countryList.addEventListener('change', this.handleCountryListChange.bind(this)); @@ -251,9 +354,28 @@ export default class AddressValidation { } } + private handleDatasetsResponse(response: DatasetsResponse): void { + let countries = response.result; + this.countryDropdown = []; + if (countries && countries.length > 0) { + for (const country of countries) { + for (const countryDataset of Object.values(country.datasets)) { + const item = datasetCodes.find(dataset => dataset.datasetCode === countryDataset.id); + if (item && !this.countryDropdown.find(o => o.country === item.country)) { + this.countryDropdown.push(item); + } + } + } + this.countryDropdown.sort((a, b) => a.country.localeCompare(b.country)) + this.events.trigger('post-datasets-update'); + } + } + // When a country from the list is changed, update the current country code, call the promptset endpoint again and reset to the default search mode private handleCountryListChange(): void { - this.currentCountryCode = this.options.elements.countryList.value; + let countryList = this.options.elements.countryList; + this.currentCountryCode = countryList.value; + this.currentCountryName = countryList[countryList.selectedIndex].label; this.getPromptset(); this.avMode = AddressValidationMode.SEARCH; } @@ -306,7 +428,7 @@ export default class AddressValidation { return JSON.stringify(data); } - private generateLookupDataForApiCall(input: string, lookupKeyword: AddressValidationLookupKeywords): string { + private generateLookupDataForApiCall(input: string, lookupKeyword: string): string { // If a dataset code hasn't been set yet, try and look it up if (!this.currentDataSet) { this.currentDataSet = this.lookupDatasetCode(); @@ -370,7 +492,7 @@ export default class AddressValidation { // (Re-)set the property stating whether the search input has been reset. // This is needed for instances when the search input is also an address - // output field. After an address has been returned, you don't want a new + // output field. After an address has been returned, you don't want a new // search being triggered until the field has been cleared. if (this.currentSearchTerm === '') { this.hasSearchInputBeenReset = true; @@ -414,25 +536,38 @@ export default class AddressValidation { let url, headers, callback, data; // Construct the new Search URL and data - switch(this.avMode) { + switch(this.avMode) { case AddressValidationMode.WHAT3WORDS: { - data = this.generateLookupDataForApiCall(this.getWhat3WordsLookupValue(this.currentSearchTerm, true), AddressValidationLookupKeywords.WHAT3WORDS); - url = this.baseUrl + this.lookupEndpoint; + data = this.generateLookupDataForApiCall(this.getWhat3WordsLookupValue(this.currentSearchTerm, true), AddressValidationLookupKeywords.WHAT3WORDS.key); + url = this.baseUrl + this.lookupV2Endpoint; headers = []; callback = this.picklist.showWhat3Words; - break; + break; } - case AddressValidationMode.UDPRN: { - data = this.generateLookupDataForApiCall(this.currentSearchTerm, AddressValidationLookupKeywords.UDPRN); - url = this.baseUrl + this.lookupEndpoint; + case AddressValidationMode.UDPRN: { + this.returnAddresses = true; + data = this.generateLookupDataForApiCall(this.currentSearchTerm, AddressValidationLookupKeywords.UDPRN.key); + url = this.baseUrl + this.lookupV2Endpoint; headers = [{ key: 'Add-Addresses', value: true }]; callback = this.picklist.showLookup; - break; - } + break; + } + case AddressValidationMode.LOOKUPV2: { + const lookupSearchTerm = this.currentSearchTerm.split(','); + this.lookupType = lookupSearchTerm[0]; + this.returnAddresses = lookupSearchTerm[1] === "true"; + let lookupValue = lookupSearchTerm[2]; + + data = this.generateLookupDataForApiCall(lookupValue.trim(), this.lookupType); + url = this.baseUrl + this.lookupV2Endpoint; + headers = [{key: 'Add-Addresses', value: true}]; + callback = this.picklist.showLookup; + break; + } default: { data = this.generateSearchDataForApiCall(); url = this.baseUrl + (this.searchType === AddressValidationSearchType.VALIDATE ? this.validateEndpoint : this.searchEndpoint); - headers = this.searchType === AddressValidationSearchType.VALIDATE ? [{ key: 'Add-Metadata', value: true }] : []; + headers = this.searchType === AddressValidationSearchType.VALIDATE ? [{ key: 'Add-Components', value: true }, { key: 'Add-Metadata', value: true }] : []; callback = this.searchType === AddressValidationSearchType.VALIDATE ? this.result.handleValidateResponse : this.picklist.show; break; } @@ -598,15 +733,14 @@ export default class AddressValidation { this.picklist.showLookup = (items: LookupV2Response) => { // Store the picklist items - this.picklist.lookupItems = items?.result.addresses; - + let picklistItem = this.returnAddresses ? items?.result.addresses: items?.result.suggestions; this.picklist.handleCommonShowPicklistLogic(); - - if (this.picklist.lookupItems?.length > 0) { + if (picklistItem?.length > 0) { // Iterate over and show results - this.picklist.lookupItems.forEach(item => { + picklistItem.forEach(item => { // Create a new item/row in the picklist - const listItem = this.picklist.createLookupListItem(item); + const listItem = this.returnAddresses + ? this.picklist.createLookupListItem(item): this.picklist.createLookupSuggestionListItem(item) ; this.picklist.list.appendChild(listItem); // Listen for selection on this item @@ -790,7 +924,8 @@ export default class AddressValidation { // Create the picklist list (and container) and inject after the input this.picklist.createList = () => { // If Singleline mode is used, then append the picklist after the last input field, otherwise use the first one - const position = this.searchType === AddressValidationSearchType.SINGLELINE ? this.inputs.length - 1 : 0; + const position = this.searchType === AddressValidationSearchType.SINGLELINE + || this.searchType === AddressValidationSearchType.LOOKUPV2 ? this.inputs.length - 1 : 0; const container = document.createElement('div'); container.classList.add('address-picklist-container'); @@ -831,7 +966,7 @@ export default class AddressValidation { const name = document.createElement('div'); const description = document.createElement('div'); - row.className = AddressValidationLookupKeywords.WHAT3WORDS; + row.className = AddressValidationLookupKeywords.WHAT3WORDS.key; name.className = 'what3Words-name'; description.className = 'what3Words-description'; @@ -860,12 +995,31 @@ export default class AddressValidation { return row; }; + this.picklist.createLookupSuggestionListItem = (item: LookupSuggestion) => { + const row = document.createElement('div'); + + let locality = item.locality; + let postalCode = item.postal_code; + row.innerHTML = locality.town.name + " " + locality.region.name + " " + postalCode.full_name; + + row.setAttribute('region_name', locality.region.name); + row.setAttribute('town_name', locality.town ? locality.town.name : ""); + row.setAttribute('postal_code_name', postalCode.full_name); + row.setAttribute('country', this.currentCountryCode); + row.setAttribute('postal_code_key', item.postal_code_key); + row.setAttribute('locality_key', item.locality_key); + return row; + }; + this.picklist.refine = { element: null, // Returns whether the picklist needs refining. This happens after an item has been "stepped into" but has an unresolvable range. // The user is prompted to enter their selection (e.g. building number). isNeeded: (response: SearchResponse) => { - return this.searchType !== AddressValidationSearchType.AUTOCOMPLETE && (response.result.confidence === 'Premises partial' || response.result.confidence === 'Street partial' || response.result.confidence === 'Multiple matches'); + return this.searchType !== AddressValidationSearchType.AUTOCOMPLETE + && (response.result.confidence === AddressValidationConfidenceType.PREMISES_PARTIAL + || response.result.confidence === AddressValidationConfidenceType.STREET_PARTIAL + || response.result.confidence === AddressValidationConfidenceType.MULTIPLE_MATCHES); }, createInput: (prompt: string, key: string) => { const row = document.querySelector('.picklist-refinement-box') || document.createElement('div'); @@ -1026,20 +1180,39 @@ export default class AddressValidation { // Fire an event when an address is picked this.events.trigger('post-picklist-selection', item); - if (item.classList.contains(AddressValidationLookupKeywords.WHAT3WORDS)){ + if (item.classList.contains(AddressValidationLookupKeywords.WHAT3WORDS.key)){ const elements = item.getElementsByTagName('div'); this.lookup(elements[0].innerHTML); + return; + } + + if (AddressValidationSearchType.LOOKUPV2 === this.searchType && !this.returnAddresses) { + this.formatLookupLocalityWithoutAddresses(item); + return; + } + + // Get a final address using picklist item unless it needs refinement + if (item.getAttribute('format')) { + this.format(item.getAttribute('format')); } else { - // Get a final address using picklist item unless it needs refinement - if (item.getAttribute('format')) { - this.format(item.getAttribute('format')); - } else { - this.refine(item.getAttribute('refine')); - } + this.refine(item.getAttribute('refine')); } }; } + private formatLookupLocalityWithoutAddresses(item) { + this.result.updateAddressLine("locality", item.getAttribute("town_name"), 'address-line-input'); + this.result.updateAddressLine("region", item.getAttribute("region_name"), 'address-line-input'); + this.result.updateAddressLine("postal_code", item.getAttribute("postal_code_name"), 'address-line-input'); + this.result.updateAddressLine("country", item.getAttribute("country"), 'address-line-input'); + + let key = AddressValidationLookupKeywords.POSTAL_CODE.key === this.lookupType + ? 'postal_code_key' : 'locality_key'; + // Create the 'Search again' link and insert into DOM + this.result.createSearchAgainLink(); + this.events.trigger('post-formatting-lookup', item.getAttribute(key), item); + } + private format(url: string) { // Trigger an event this.events.trigger('pre-formatting-search', url); @@ -1048,7 +1221,8 @@ export default class AddressValidation { this.searchSpinner.hide(); // Initiate a new Format request - this.request.send(url, 'GET', this.result.show, undefined, [{ key: 'Add-Metadata', value: true }/*, {key: 'Add-Components', value: true}*/]); + this.request.send(url, 'GET', this.result.show, undefined, + [{key: 'Add-Components', value: true}, { key: 'Add-Metadata', value: true }/*, {key: 'Add-Components', value: true}*/]); } private refine(key: string) { @@ -1070,9 +1244,9 @@ export default class AddressValidation { this.searchSpinner.hide(); //Get the lookup requet - const lookupV2Request = this.generateLookupDataForApiCall(key, AddressValidationLookupKeywords.WHAT3WORDS); + const lookupV2Request = this.generateLookupDataForApiCall(key, AddressValidationLookupKeywords.WHAT3WORDS.key); - const url = this.baseUrl + this.lookupEndpoint; + const url = this.baseUrl + this.lookupV2Endpoint; const headers = [{ key: 'Add-Addresses', value: true }]; const callback = this.picklist.showLookup; @@ -1097,7 +1271,8 @@ export default class AddressValidation { // Allow Autocomplete through as it will need to create the additional output fields for the final address. // Otherwise, only render the final address if there are results available. - if (this.searchType === AddressValidationSearchType.AUTOCOMPLETE || (data.result.address && data.result.confidence !== 'No matches')) { + if (this.searchType === AddressValidationSearchType.AUTOCOMPLETE + || (data.result.address && data.result.confidence !== AddressValidationConfidenceType.NO_MATCHES)) { // Clear search input(s) this.inputs.forEach(input => input.value = ''); @@ -1120,6 +1295,24 @@ export default class AddressValidation { this.result.updateAddressLine(key, addressComponent, 'address-line-input'); } + this.componentsCollectionMap.clear(); + let components = data.result.components; + if (components) { + for (let i = 0; i < Object.keys(components).length; i++) { + const key = Object.keys(components)[i]; + this.componentsCollectionMap.set(key, components[key]); + } + } + + this.metadataCollectionMap.clear(); + let metadata = data.metadata; + if (metadata) { + for (let i = 0; i < Object.keys(metadata).length; i++) { + const key = Object.keys(metadata)[i]; + this.metadataCollectionMap.set(key, metadata[key]); + } + } + // Hide country and address search fields (if they have a 'toggle' class) this.toggleSearchInputs('hide'); @@ -1334,7 +1527,8 @@ export default class AddressValidation { }, // Decide whether to either show a picklist or a verified result from a Validate response handleValidateResponse: (response: SearchResponse) => { - if (response.result.confidence === 'Verified match') { + if (response.result.confidence === AddressValidationConfidenceType.VERIFIED_MATCH + || response.result.confidence === AddressValidationConfidenceType.INTERACTION_REQUIRED) { // If the response contains an address, then use this directly in the result if (response.result.address) { this.result.show(response); @@ -1349,9 +1543,94 @@ export default class AddressValidation { // If there are no matches, then allow "use address entered" this.picklist.handleEmptyPicklist(response); } + }, + + handleEnrichmentResponse: (response: EnrichmentResponse) => { + let geocodesDetailsMap = this.geocodes.detailsMap; + let cvDetailsMap = this.cvHousehold.detailsMap; + geocodesDetailsMap.clear(); + cvDetailsMap.clear(); + this.premiumLocationInsightMap.clear(); + + let geocodeResponse; + let geocodesExpectedAttributes; + let geocodesExpectedAttributeDescription; + let cvHouseholdResponse; + let cvHouseholdExpectedAttributes; + let cvHouseholdExpectedAttributeDescription; + + if (response.result.aus_regional_geocodes) { + this.geocodes.title = enrichmentOutput.AUS.geocodes_title; + this.cvHousehold.title = enrichmentOutput.AUS.cv_household_title; + geocodeResponse = Object.entries(response.result.aus_regional_geocodes); + geocodesExpectedAttributes = new Map(Object.entries(enrichmentOutput.AUS.aus_regional_geocodes)); + cvHouseholdResponse = Object.entries(response.result.aus_cv_household); + cvHouseholdExpectedAttributes = new Map(Object.entries(enrichmentOutput.AUS.aus_cv_household)); + cvHouseholdExpectedAttributeDescription = new Map(Object.entries(consumerViewDescriptions.AUS)); + geocodesExpectedAttributeDescription = new Map(Object.entries(regionalGeocodeDescriptions.AUS)); + } else if (response.result.nzl_regional_geocodes) { + this.geocodes.title = enrichmentOutput.NZL.geocodes_title; + this.cvHousehold.title = enrichmentOutput.NZL.cv_household_title; + geocodeResponse = Object.entries(response.result.nzl_regional_geocodes); + geocodesExpectedAttributes = new Map(Object.entries(enrichmentOutput.NZL.nzl_regional_geocodes)); + cvHouseholdResponse = Object.entries(response.result.nzl_cv_household); + cvHouseholdExpectedAttributes = new Map(Object.entries(enrichmentOutput.NZL.nzl_cv_household)); + cvHouseholdExpectedAttributeDescription = new Map(Object.entries(consumerViewDescriptions.NZL)); + } else if (response.result.usa_regional_geocodes) { + this.geocodes.title = enrichmentOutput.USA.geocodes_title; + geocodeResponse = Object.entries(response.result.usa_regional_geocodes); + geocodesExpectedAttributes = new Map(Object.entries(enrichmentOutput.USA.usa_regional_geocodes)); + } else if (response.result.uk_location_essential) { + this.geocodes.title = enrichmentOutput.GBR.geocodes_title; + geocodeResponse = Object.entries(response.result.uk_location_essential); + geocodesExpectedAttributes = new Map(Object.entries(enrichmentOutput.GBR.uk_location_essential)); + } else { + this.geocodes.title = enrichmentOutput.GLOBAL.geocodes_title; + geocodeResponse = Object.entries(response.result.geocodes); + geocodesExpectedAttributes = new Map(Object.entries(enrichmentOutput.GLOBAL.geocodes)); + } + + let premiumLocationInsightResponse = response.result.premium_location_insight; + if (premiumLocationInsightResponse) { + for (let i = 0; i < Object.keys(premiumLocationInsightResponse).length; i++) { + let key = Object.keys(premiumLocationInsightResponse)[i]; + let value = premiumLocationInsightResponse[key]; + // to skip display unnecessary 0 index in the UI if only 1 array object is returned + if (Array.isArray(value) && value.length === 1) { + this.premiumLocationInsightMap.set(key, value[0]); + continue; + } + this.premiumLocationInsightMap.set(key, value); + } + } + + this.populateResponseToMap(geocodeResponse, geocodesExpectedAttributes, geocodesExpectedAttributeDescription, geocodesDetailsMap); + this.populateResponseToMap(cvHouseholdResponse, cvHouseholdExpectedAttributes, cvHouseholdExpectedAttributeDescription, cvDetailsMap); + this.events.trigger('post-enrichment', response); } }; + private populateResponseToMap(response, expectedAttributes: Map, + expectedAttributeDescription: Map, detailsMap: Map): void { + if (response) { + for (const [key, value] of response) { + if (!expectedAttributes.has(key)) { + continue; + } + + let label = expectedAttributes.get(key); + if (expectedAttributeDescription && expectedAttributeDescription.has(key)) { + let valueObj = expectedAttributeDescription.get(key); + let item = Object.values(valueObj).find(dataset => dataset.id === value); + if (item) { + this.tooltipDescriptionMap.set(label, item.title); + } + } + detailsMap.set(label, value); + } + } + } + private checkTab(event: KeyboardEvent): void { const key = this.getKey(event); if (key === 'Tab') { @@ -1423,8 +1702,9 @@ export default class AddressValidation { // Apply focus to input this.inputs[0].focus(); - // Reset to default - this.avMode = AddressValidationMode.SEARCH; + // set AddressValidationMode based on the search type selected + this.avMode = AddressValidationSearchType.LOOKUPV2 === this.searchType + ? AddressValidationMode.LOOKUPV2 : AddressValidationMode.SEARCH; // Fire an event after a reset this.events.trigger('post-reset'); diff --git a/src/ts/class-types.ts b/src/ts/class-types.ts index 9799e04..d8f7ed4 100644 --- a/src/ts/class-types.ts +++ b/src/ts/class-types.ts @@ -19,6 +19,7 @@ export class Picklist { createList: () => HTMLDivElement; createListItem: (item: PicklistItem) => HTMLDivElement; createLookupListItem: (item: LookupAddress) => HTMLDivElement; + createLookupSuggestionListItem: (item: LookupSuggestion) => HTMLDivElement; createWhat3WordsListItem: (item: What3WordsPickList) => HTMLDivElement; tabCount: number; resetTabCount: () => void; @@ -48,6 +49,7 @@ export class AddressValidationResult { createSearchAgainLink: () => void; renderInputList: (inputArray) => void; handleValidateResponse: (response: SearchResponse) => void; + handleEnrichmentResponse: (response: EnrichmentResponse) => void; } class CreateAddressLine { @@ -62,9 +64,10 @@ export interface SearchResponse { suggestions_key?: string; confidence: string; address?: { [key: string]: string }; - } + components?: { [key: string]: string }; + }, + metadata? : { [key: string]: string }; } - export interface LookupW3WResponse { result?: { more_results_available: boolean; @@ -77,10 +80,37 @@ export interface LookupV2Response { result?: { more_results_available: boolean; confidence: string; + suggestions: LookupSuggestion[]; addresses: LookupAddress[]; } } +export interface LookupSuggestion { + locality: LocalityComponents; + postal_code: PostalCode; + postal_code_key: string; + locality_key: string; +} + +export interface LocalityComponents { + region: LocalityItem, + sub_region: LocalityItem, + town: LocalityItem, + district: LocalityItem, + sub_district: LocalityItem +} + +export interface LocalityItem { + name: string, + code: string +} + +export interface PostalCode { + full_name: string, + primary: string, + secondary: string +} + export interface LookupAddress { text: string; global_address_key: string; @@ -103,7 +133,41 @@ export interface PicklistItem { global_address_key?: string; additional_attributes?: { name: string, Value: string }[]; } - +export class EnrichmentDetails { + title: string; + detailsMap = new Map(); +} +export interface EnrichmentResponse { + result?: { + aus_regional_geocodes?: { [key: string]: string }; + aus_cv_household?: { [key: string]: string }; + nzl_regional_geocodes?: { [key: string]: string }; + nzl_cv_household?: { [key: string]: string }; + usa_regional_geocodes?: { [key: string]: string }; + uk_location_essential?: { [key: string]: string }; + what3words?: What3Words; + geocodes?: { [key: string]: string }; + premium_location_insight?: { [key: string]: string }; + }; +} +export interface What3Words { + latitude?: string; + longitude?: string; + name?: string; + description?: string; +} +export interface DatasetsResponse { + result? : DatasetsCountryResult[]; +} +export interface DatasetsCountryResult { + country_iso_3?: string; + country_name?: string; + datasets?: Dataset[]; +} +export interface Dataset{ + id?: string; + name?: string; +} export class UseAddressEntered { element: HTMLElement; create: (confidence: string) => HTMLDivElement; diff --git a/src/ts/consumer-view-description.ts b/src/ts/consumer-view-description.ts new file mode 100644 index 0000000..73147cd --- /dev/null +++ b/src/ts/consumer-view-description.ts @@ -0,0 +1,938 @@ +export const consumerViewDescriptions = { + AUS: { + mosaic_group: [ + { + id: "A", + title: "First Class Life", + description: "Wealthiest group in Australia, typically older middle-aged families with significant assets and income" + }, + { + id: "B", + title: "Comfortable Foundations", + description: "Gen X families with school-aged children, working in white-collar professions and living in suburban areas" + }, + { + id: "C", + title: "Striving for Status", + description: "Young, successful, career-driven professionals living in central city areas with high income and no children" + }, + { + id: "D", + title: "Secure Tranquillity", + description: "Affluent retirees living in higher valued properties in desirable areas" + }, + { + id: "E", + title: "Family Fringes", + description: "Middle-aged traditional families living on large outer-suburban plots, with comfortable incomes and long commutes" + }, + { + id: "F", + title: "Establishing Roots", + description: "Millennial first home buyers, living 10km+ from the city centre with above average income" + }, + { + id: "G", + title: "Growing Independence", + description: "Educated millennials at the start of their careers, renting apartments close to city centres" + }, + { + id: "H", + title: "Middle Blue-collars", + description: "Younger blue-collar workers renting far from city centres, with below average income" + }, + { + id: "I", + title: "Traditional Pursuits", + description: "Average income traditional families & single parents with school-aged children living in outer suburban and regional locations" + }, + { + id: "J", + title: "True Grit", + description: "Blue-collar households in gainful employment, residing in locations across outer suburban, regional and mining towns" + }, + { + id: "K", + title: "Mature Freedom", + description: "Gen X couples without children, renting apartments and terraces in high growth suburbs" + }, + { + id: "L", + title: "Hardship & Perseverance", + description: "Unemployed and blue-collar workers living in units and flats on low incomes" + }, + { + id: "M", + title: "Graceful Ageing", + description: "Older retirees with below average income, living in owned properties or retirement villages" + }, + { + id: "N", + title: "Rural Commitment", + description: "Rural people working in agriculture, living on large plots of land far from main roads and main towns" + } + ], + mosaic_type: [ + { + id: "A01", + title: "Top of the Ladder", + description: "Wealthiest families, married couples often with adult children, owning very expensive properties in exclusive inner-urban areas" + }, + { + id: "A02", + title: "Luxury Living", + description: "Baby boomer families, often with adult children, owning expensive properties in inner-urban & coastal areas" + }, + { + id: "A03", + title: "Central Prosperity", + description: "Middle-older aged empty nester couples renting very expensive properties in inner-urban areas, with high income" + }, + { + id: "A04", + title: "Suburban Esteem", + description: "Traditional baby boomer couples with adult children, owning expensive properties in inner-urban & suburban areas of Sydney & Melbourne" + }, + { + id: "B05", + title: "Successful Spending", + description: "Young, married couples with children and high income, living in outer-suburban/metro-fringe areas" + }, + { + id: "B06", + title: "Careers & Kids", + description: "Gen X families with children, living in expensive properties in suburban areas, with high income" + }, + { + id: "B07", + title: "Fruitful Families", + description: "Gen X families with many children, living in metro-fringe areas, with high income" + }, + { + id: "C08", + title: "Rooftops & Careers", + description: "Well-educated, high-powered business people with very high income and no children, living in expensive properties in central Sydney" + }, + { + id: "C09", + title: "Elite Alternatives", + description: "Well-educated professionals, living in trendy inner-urban areas, with high income" + }, + { + id: "C10", + title: "Power Couples", + description: "Young diverse couples, well-educated, transient, city centre renters with high income and no children" + }, + { + id: "D11", + title: "Scenic Connection", + description: "Older couples in semi-retirement, living in suburban areas and nearby towns for many years, with high income" + }, + { + id: "D12", + title: "Journeyed Equity", + description: "Elderly couples from multicultural backgrounds living in expensive properties in suburban areas of Sydney & Melbourne" + }, + { + id: "D13", + title: "Coastal Comfort", + description: "Retired, traditional couples living in coastal and scenic areas, with average pensionable income levels" + }, + { + id: "E14", + title: "Spacious Traditions", + description: "Middle-aged, traditional families with older children, owning large and expensive properties in outer-suburban areas with high income" + }, + { + id: "E15", + title: "Opulent Designs", + description: "Middle-aged families owning huge houses in outer-suburban areas, with high income" + }, + { + id: "E16", + title: "Hardware & Acreage", + description: "Working in trades, middle-aged families owning acreages of land with large properties just outside the metro fringe" + }, + { + id: "F17", + title: "Determined Suburbans", + description: "Professional couples and singles with high income, owning their first home in high growth inner suburbs" + }, + { + id: "F18", + title: "Developing Domestics", + description: "Young first-home-owner families with very young children, recently moved into new housing estates, with above average income" + }, + { + id: "F19", + title: "Striving Scholars", + description: "Young, highly educated singles and couples, with above average income, living in high growth suburbs" + }, + { + id: "G20", + title: "Youthful Ambition", + description: "Young singles and couples, some students, with no children, renting flats in inner-urban areas, with average income" + }, + { + id: "G21", + title: "Emerging Metros", + description: "Young, well-educated and culturally diverse, renting flats in suburban areas of Sydney, with above average income and no children" + }, + { + id: "G22", + title: "Spirit Questers", + description: "Millennial singles renting in coastal tourist areas, with below average income" + }, + { + id: "G23", + title: "Global Studies", + description: "Young student renters near university campuses, culturally diverse with very low or no income but high spend" + }, + { + id: "H24", + title: "Backyards & Mates", + description: "Millennial blue-collar couples and singles, living in outer-suburban areas and surrounding towns with average income" + }, + { + id: "H25", + title: "Prams & Trades", + description: "Younger blue-collar families with many children, living in new outer-suburban housing estates, with low to average income" + }, + { + id: "H26", + title: "Earnest Internationals", + description: "Younger, diverse blue-collar commuters renting apartments in Sydney outer-suburban areas, with low income" + }, + { + id: "H27", + title: "Township Solos", + description: "Younger blue-collar singles in regional towns, with low income but have financial stability" + }, + { + id: "I28", + title: "Schools & Bills", + description: "Millennial families with young children, sometimes single parents, commuting from outer-suburban areas with average incomes" + }, + { + id: "I29", + title: "Middle of the Road", + description: "Older traditional families with older children, commuting from the metro-fringe with average to high incomes" + }, + { + id: "I30", + title: "Regional Essentials", + description: "Couples and single parents with children living in regional areas with low to average incomes" + }, + { + id: "J31", + title: "Minerals & Airports", + description: "Mixture of singles and couples in mining towns, sometimes with children, earning high incomes" + }, + { + id: "J32", + title: "Selfless & Hardworking", + description: "Blue-collar families from multicultural backgrounds, living in outer-suburban areas, with average to high income" + }, + { + id: "J33", + title: "Life in the Slow Lane", + description: "Middle-aged, blue-collar couples living in outer-suburban/metro-fringe areas, with average income" + }, + { + id: "J34", + title: "Country Town Courage", + description: "Low education, monocultural, manual workers with low income, living in low value properties in rural towns" + }, + { + id: "K35", + title: "Mature Modernites", + description: "Middle-aged couples without children, renting in inner suburban apartments and terraces" + }, + { + id: "K36", + title: "New-found Freedom", + description: "Middle-aged, empty nester couples living in outer-suburban/metro-fringe areas, with above average income" + }, + { + id: "K37", + title: "Realistic Horizons", + description: "Gen X couples and sharers living in outer-suburban and regional areas, with low income and small properties" + }, + { + id: "L38", + title: "Reset Regionals", + description: "Blue-collar families, often single parents, living in rural towns with low income and dependent children" + }, + { + id: "L39", + title: "New-found Life", + description: "Multicultural families, sometimes single parents, living in outer-suburban areas with low income" + }, + { + id: "L40", + title: "Satellite Battlers", + description: "Low income singles in regional towns, sometimes living in social housing" + }, + { + id: "L41", + title: "Downtown Blues", + description: "Older single and diverse, city centre renters with very low income, often living in social housing" + }, + { + id: "L42", + title: "Township Assistance", + description: "Younger families, often single parents, with low incomes in regional towns, often living in social housing" + }, + { + id: "M43", + title: "Blue-collar Retirees", + description: "Multicultural older couples living in outer-suburban areas for a long time, with low income but high property value" + }, + { + id: "M44", + title: "Staying Put", + description: "Older, retired couples, sometimes with adult children or carers, who are long term resident in outer-suburban areas" + }, + { + id: "M45", + title: "Lonesome Elders", + description: "Older singles, living in outer-suburban areas and satellite towns, with below average income" + }, + { + id: "M46", + title: "Retirement Village", + description: "Elderly, traditional couples and singles living in retirement villages in cities and regional towns" + }, + { + id: "M47", + title: "Rural Retirement", + description: "Elderly couples, sometimes with adult children or carers, who are long term residents in rural towns, with low pension income" + }, + { + id: "N48", + title: "Farming Reliance", + description: "Rural farmers and farm owners with below average income, living 10-40km away from the nearest town" + }, + { + id: "N49", + title: "Outback Comfort", + description: "Very rural farmers and farm owners with below average income, living 40km+ from the nearest town" + }, + { + id: "N50", + title: "Soil & Toil", + description: "Single farm workers in very small rural towns. with low income and low value properties" + }, + { + id: "N51", + title: "Rustic Isolation", + description: "Low education, traditional, singles in far inland remote towns, with low income and low value properties" + } + ] + }, + NZL: { + adults_at_address: [ + { + id: "1", + title: "One adult", + description: "The residential property is likely to contain one adult over the age of 18 years residing within the dwelling" + }, + { + id: "2", + title: "Two adults", + description: "The residential property is likely to contain two adults over the age of 18 years residing within the dwelling" + }, + { + id: "3", + title: "Three adults", + description: "The residential property is likely to contain three adults over the age of 18 years residing within the dwelling" + }, + { + id: "4", + title: "Four adults", + description: "The residential property is likely to contain four adults over the age of 18 years residing within the dwelling" + }, + { + id: "5", + title: "Five adults", + description: "The residential property is likely to contain five adults over the age of 18 years residing within the dwelling" + }, + { + id: "6", + title: "Six adults", + description: "The residential property is likely to contain six adults over the age of 18 years residing within the dwelling" + }, + { + id: "7", + title: "Seven adults", + description: "The residential property is likely to contain seven adults over the age of 18 years residing within the dwelling" + }, + { + id: "8", + title: "Eight adults", + description: "The residential property is likely to contain eight adults over the age of 18 years residing within the dwelling" + } + ], + children_at_address: [ + { + id: "1", + title: "Extremely low likelihood", + description: "Extremely low likelihood of the presence of children in the household" + }, + { + id: "2", + title: "Very low likelihood", + description: "Very low likelihood of the presence of children in the household" + }, + { + id: "3", + title: "Low likelihood", + description: "Low likelihood of the presence of children in the household" + }, + { + id: "4", + title: "Below average likelihood", + description: "Below average likelihood of the presence of children in the household" + }, + { + id: "5", + title: "Average likelihood", + description: "Average likelihood of the presence of children in the household" + }, + { + id: "6", + title: "Above average likelihood", + description: "Above average likelihood of the presence of children in the household" + }, + { + id: "7", + title: "Moderately high likelihood", + description: "Moderately high likelihood of the presence of children in the household" + }, + { + id: "8", + title: "High likelihood", + description: "High likelihood of the presence of children in the household" + }, + { + id: "9", + title: "Very high likelihood", + description: "Very high likelihood of the presence of children in the household" + }, + { + id: "10", + title: "Extremely high likelihood", + description: "Extremely high likelihood of the presence of children in the household" + } + ], + head_of_household_age: [ + { + id: "1", + title: "Under 20", + description: "The age of the consumer (combination of both actual and estimated) is under 20 years" + }, + { + id: "2", + title: "20 to 24 years", + description: "The age of the consumer (combination of both actual and estimated) is between 20 to 24 years" + }, + { + id: "3", + title: "25 to 29 years", + description: "The age of the consumer (combination of both actual and estimated) is between 25 to 29 years" + }, + { + id: "4", + title: "30 to 34 years", + description: "The age of the consumer (combination of both actual and estimated) is between 30 to 34 years" + }, + { + id: "5", + title: "35 to 39 years", + description: "The age of the consumer (combination of both actual and estimated) is between 35 to 39 years" + }, + { + id: "6", + title: "40 to 44 years", + description: "The age of the consumer (combination of both actual and estimated) is between 40 to 44 years" + }, + { + id: "7", + title: "45 to 49 years", + description: "The age of the consumer (combination of both actual and estimated) is between 45 to 49 years" + }, + { + id: "8", + title: "50 to 54 years", + description: "The age of the consumer (combination of both actual and estimated) is between 50 to 54 years" + }, + { + id: "9", + title: "55 to 59 years", + description: "The age of the consumer (combination of both actual and estimated) is between 55 to 59 years" + }, + { + id: "10", + title: "60 to 64 years", + description: "The age of the consumer (combination of both actual and estimated) is between 60 to 64 years" + }, + { + id: "11", + title: "65 to 69 years", + description: "The age of the consumer (combination of both actual and estimated) is between 65 to 69 years" + }, + { + id: "12", + title: "70 to 74 years", + description: "The age of the consumer (combination of both actual and estimated) is between 70 to 74 years" + }, + { + id: "13", + title: "75 to 79 years", + description: "The age of the consumer (combination of both actual and estimated) is between 75 to 79 years" + }, + { + id: "14", + title: "80 to 84 years", + description: "The age of the consumer (combination of both actual and estimated) is between 80 to 84 years" + }, + { + id: "15", + title: ">= 85 year", + description: "The age of the consumer (combination of both actual and estimated) is greater than or equal to 85 years" + } + ], + head_of_household_lifestage: [ + { + id: "1", + title: "Young families", + description: "Families, Extended Families and Single Parents under 35" + }, + { + id: "2", title: "Independent Youth", description: "Couples, Singles and Homesharers under 35" + }, + { + id: "3", + title: "Maturing Couples and Families", + description: "Families, Couples, Extended Families and Single Parents aged 35-44" + }, + { + id: "4", title: "Maturing Independence", description: "Singles and Homesharers aged 35-54" + }, + { + id: "5", + title: "Established Couples and Families", + description: "Families, Couples, Extended Families and Single Parents aged 45-54" + }, + { + id: "6", + title: "Older Couples and Families", + description: "Families, Couples, Extended Families and Single Parents aged 55-64" + }, + { + id: "7", title: "Older Independence", description: "Singles and Homesharers aged 55-64" + }, + { + id: "8", + title: "Elderly Families", + description: "Families, Extended Families and Single Parents 65 and over" + }, + { + id: "9", title: "Elderly Couples", description: "Couples 65 and over" + }, + { + id: "10", title: "Elderly Singles", description: "Singles and Homesharers 65 and over" + } + ], + household_composition: [ + { + id: "1", + title: "Families", + description: "The residential property is likely to contain a family unit which is made up of two adults with children" + }, + { + id: "2", + title: "Extended Families", + description: "The residential property is likely to contain an extended family unit which is made up of three or more adults with the same surname" + }, + { + id: "3", + title: "Couples", + description: "The residential property is likely to contain people living as a couple which is made up of two adults and no children" + }, + { + id: "4", + title: "Single Parent", + description: "The residential property is likely to contain an single parent family unit which is made up of one adult with children" + }, + { + id: "5", + title: "Single", + description: "The residential property is likely to contain a single adult only" + }, + { + id: "6", + title: "Homeshares", + description: "The residential property is likely to contain a home share environment which is made up of three or more adults with different surnames" + } + ], + mosaic_group: [ + { + id: "A", + title: "Corporate Ladder Kings", + description: "Educated professionals living in large houses in desirable areas, looking for balance to their busy lives and planning for the future" + }, + { + id: "B", + title: "Reaping The Rewards", + description: "Established conservative older couples living comfortable lives in high quality houses, appreciating traditional country pursuits" + }, + { + id: "C", + title: "Tractors And Trees", + description: "Hard working rural farming families living in large comfortable homes, who are engaged in the local community" + }, + { + id: "D", + title: "Smartphone Savvies", + description: "Young technology savvy home sharers or families living comfortably in urban apartments with strong career goals and a positive outlook" + }, + { + id: "E", + title: "Watching The Pennies", + description: "Older families and couples with conservative views, who are careful with their money and have an easy going attitude to life" + }, + { + id: "F", + title: "Generation Next", + description: "Young singles who are studying or just starting out in their careers, living in urban apartments, and love technology and new gadgets" + }, + { + id: "G", + title: "Crochet Communities", + description: "Elderly singles living in rented apartments, living off their investments, who watch TV and listen to the radio to stay in touch" + }, + { + id: "H", + title: "Bargains, Benefits And Babies", + description: "Young families focused on their young kids who are finding it hard to balance work and leisure, feeling burdened by their finances" + }, + { + id: "I", + title: "Extended Cultural Living", + description: "Mixed family Maori or Pacific Islander households with a strong family focus, financially stressed and making do" + } + ], + mosaic_segment: [ + {id: "01_1", title: "More elderly, more employers and more single person households"}, + {id: "01_2", title: "More children, higher affluent and more 7+ person households"}, + {id: "02_1", title: "Much more elderly, more employers and more single person households"}, + {id: "02_2", title: "More overseas born, more 7+ person households and higher property ownership"}, + {id: "02_3", title: "Much more children, higher affluent and higher property ownership"}, + {id: "03_1", title: "Shorter time at address, higher affluent, larger properties"}, + {id: "03_2", title: "More elderly, longer time at address and more urban"}, + { + id: "03_3", + title: "Much longer time at address, more highly educated and more single person households" + }, + {id: "04_1", title: "Higher affluent, higher household income, larger properties"}, + {id: "04_2", title: "Longer time at address, more single person households and more urban"}, + {id: "04_3", title: "Less educated, higher property ownership and more rural"}, + {id: "05_1", title: "More highly educated, higher affluent and larger properties"}, + {id: "05_2", title: "More children, more employees and more urban"}, + {id: "05_3", title: "More children, less educated, higher property ownership"}, + {id: "06_1", title: "More employers, smaller properties and more rural"}, + {id: "06_2", title: "More elderly, more 3+ children households, less educated"}, + {id: "06_3", title: "More highly educated, more overseas born and more urban"}, + {id: "06_4", title: "Higher affluence, higher household income, larger properties"}, + {id: "07_1", title: "Much more elderly, much more 3+ children households, higher affluence"}, + {id: "07_2", title: "More elderly, more employers, larger properties"}, + {id: "07_3", title: "More children, more longer time at address, more 7+ person households"}, + {id: "08_1", title: "Less educated, smaller properties, more rural"}, + {id: "08_2", title: "More elderly, more New Zealand born, higher property ownership"}, + {id: "08_3", title: "Much more overseas born, higher household income, more urban"}, + {id: "09_1", title: "Much more children, shorter time at address, much lower property ownership"}, + {id: "09_2", title: "Much longer time at address, much less educated, more single person households"}, + {id: "09_3", title: "More elderly, higher affluent, much higher property ownership"}, + {id: "10_1", title: "Much more children, more employees, much higher property ownership"}, + {id: "10_2", title: "Much more elderly, much more single person households, much more urban"}, + {id: "10_3", title: "Much longer time at address, much more employers, more rural"}, + {id: "10_4", title: "Shorter time at address, higher affluent, more 7+ person households"}, + { + id: "11_1", + title: "More no children households, more longer time at address, higher property ownership" + }, + { + id: "11_2", + title: "Much more no children households, much lower property ownership, much smaller properties" + }, + {id: "11_3", title: "More 3+ children households, less educated, larger properties"}, + {id: "12_1", title: "More longer time at address, more overseas born, more urban"}, + {id: "12_2", title: "Much more no children households, more highly educated, lower property ownership"}, + {id: "12_3", title: "More elderly, more longer time at address, less educated"}, + {id: "12_4", title: "Much more children, shorter time at address, more rural"}, + {id: "13_1", title: "More highly educated, higher affluence, higher household income"}, + { + id: "13_2", + title: "Much longer time at address, much less educated, much more single person households" + }, + {id: "13_3", title: "Much more deprived, much more 7+ person households, much lower property ownership"}, + {id: "14_1", title: "More single person households, lower property ownership, smaller properties"}, + {id: "14_2", title: "More New Zealand born, more single person households, smaller properties"}, + {id: "14_3", title: "Higher household income, much more 7+ person households, larger properties"}, + {id: "15_1", title: "More children, more New Zealand born, more single person households"}, + {id: "15_2", title: "Much more 7+ person households, much lower property ownership, smaller properties"}, + {id: "15_3", title: "More highly educated, higher household income, larger properties"}, + { + id: "16_1", + title: "Much more overseas born, much more 7+ person households, much lower property ownership" + }, + {id: "16_2", title: "More children, less educated, much more New Zealand born"}, + {id: "16_3", title: "More highly educated, higher affluence, higher household income"}, + {id: "16_4", title: "Much less educated, lower household income, much more single person households"}, + {id: "17_1", title: "More no children households, more longer time at address, smaller properties"}, + {id: "17_2", title: "More elderly, more employers, larger properties"}, + {id: "17_3", title: "More elderly, more deprived, more urban"}, + {id: "18_1", title: "More no children households, more 7+ person households, more urban"}, + {id: "18_2", title: "More highly educated, higher affluent, more single person households"}, + {id: "18_3", title: "More deprived, more single person households, larger properties"}, + {id: "18_4", title: "More children, more 7+ person households, lower property ownership"}, + {id: "18_5", title: "More elderly, lower household income, smaller properties"}, + {id: "19_1", title: "More children, higher household income, higher property ownership"}, + {id: "19_2", title: "Much less educated, much more deprived, lower household income"}, + {id: "19_3", title: "More no children households, more highly educated, more single person households"}, + {id: "19_4", title: "More elderly, higher affluent, more 7+ person households"}, + {id: "20_1", title: "More children, less educated, larger properties"}, + {id: "20_2", title: "More highly educated, much smaller properties, much more urban"}, + {id: "21_1", title: "More New Zealand born, much more deprived, much more single person households"}, + { + id: "21_2", + title: "Much more overseas born, much more 7+ person households, much higher property ownership" + }, + { + id: "21_3", + title: "Much more no children households, lower property ownership, much smaller properties" + }, + {id: "22_1", title: "More longer time at address, much more 7+ person households, larger properties"}, + {id: "22_2", title: "Much more overseas born, much more deprived, much smaller properties"}, + {id: "23_1", title: "More highly educated, much more employers, much smaller properties"}, + {id: "23_2", title: "More children, less educated, higher property ownership"}, + {id: "23_3", title: "More highly educated, more overseas born, higher household income"}, + {id: "23_4", title: "Much longer time at address, much less educated, more rural"}, + {id: "24_1", title: "More children, much more deprived, larger properties"}, + {id: "24_2", title: "Much more elderly, much more single person households, much smaller properties"}, + {id: "25_1", title: "More no children households, lower property ownership, much more urban"}, + {id: "25_2", title: "Much longer time at address, much more deprived, more rural"}, + {id: "25_3", title: "Much more elderly, more 3+ children households, more urban"}, + {id: "26_1", title: "Much more children, more overseas born, more urban"}, + {id: "26_2", title: "Much more elderly, much longer time at address, more rural"}, + {id: "26_3", title: "More children, higher household income, more 7+ person households"}, + {id: "26_4", title: "Much more elderly, more single person households, more rural"}, + {id: "27_1", title: "More elderly, larger properties, much more urban"}, + {id: "27_2", title: "Much more children, more highly educated, higher affluence"}, + {id: "27_3", title: "Much more elderly, much more single person households, smaller properties"}, + {id: "27_4", title: "More longer time at address, less educated, higher property ownership"}, + {id: "28_1", title: "More children, more deprived, more 7+ person households"}, + {id: "28_2", title: "More children, more 7+ person households, more urban"}, + {id: "28_3", title: "More 7+ person households, larger properties, more rural"}, + {id: "28_4", title: "Much more elderly, much more single person households, much smaller properties"}, + {id: "29_1", title: "More employers, more single person households, smaller properties"}, + {id: "29_2", title: "Much more deprived, more employers, much more 7+ person households"}, + {id: "29_3", title: "More children, shorter time at address, lower property ownership"}, + { + id: "29_4", + title: "No children households, more longer time at address, less educated, higher property ownership, urban" + }, + {id: "30_1", title: "Much more deprived, much more single person households, much smaller properties"}, + {id: "30_2", title: "More overseas born, higher household income, much more 7+ person households"}, + {id: "30_3", title: "Much more children, more longer time at address, more 7+ person households"}, + {id: "31_1", title: "More New Zealand born, more single person households, higher property ownership"}, + {id: "31_2", title: "Much less educated, much more deprived, much more 7+ person households"}, + {id: "31_3", title: "More highly educated, more single person households, smaller properties"}, + {id: "31_4", title: "More children, much more 7+ person households, larger properties"}, + {id: "32_1", title: "Much more overseas born, much more deprived, much smaller properties"}, + { + id: "32_2", + title: "More longer time at address, much more New Zealand born, much higher property ownership" + }, + {id: "33_1", title: "More employers, smaller properties, more rural"}, + {id: "33_2", title: "Much more deprived, lower property ownership, more urban"}, + {id: "33_3", title: "More employees, higher property ownership, more urban"}, + {id: "34_1", title: "More longer time at address, more New Zealand born, much higher property ownership"}, + {id: "34_2", title: "More single person households, much higher property ownership, more rural"}, + {id: "34_3", title: "Much more overseas born, lower property ownership, much more 7+ person households"} + ], + mosaic_type_group: [ + { + id: "A01", + title: "Power Professionals", + description: "Highly prosperous households comprising of finance savvy professionals and business owners, living in grand houses in desirable areas" + }, + { + id: "A02", + title: "Wine And Waves", + description: "Older, well-educated families on the verge of retirement enjoying the rewards of successful careers, using the internet to keep updated" + }, + { + id: "A03", + title: "Double Dollar Suits ", + description: "Well-educated double income professional couples with young families, using technology to juggle their busy lifestyles" + }, + { + id: "A04", + title: "Gold Plated Ride-Ons", + description: "Wealthy families with large modern properties on the rural outskirts, enjoying the outdoors and have practical technology needs" + }, + { + id: "B05", + title: "Tea And Biscuits", + description: "Financially secure, older couples who have paid off their homes close to the city, now enjoying more time for their hobbies" + }, + { + id: "B06", + title: "Outdoor Wanderers", + description: "Established couples or families living in larger rural properties who embrace the outdoor life and enjoy traditional country pursuits" + }, + { + id: "B07", + title: "Backwater Bowls", + description: "Traditional New Zealander wealthy retired couples, enjoying a comfortable settled life in regional towns, leading healthy lifestyles" + }, + { + id: "C08", + title: "High Speed Harvesters", + description: "Older hard working families with farming backgrounds in rural locations, transferring the running of the farm to the next generation" + }, + { + id: "C09", + title: "Farming The Wilderness", + description: "Practically minded rural farming families with modest lifestyles, financial burdens, and a passion for fast cars and motorbikes" + }, + { + id: "C10", + title: "Rustic Retirees", + description: "Semi-retired older couples living in outer regional and rural locations, with simple tastes, enjoying the local community spirit" + }, + { + id: "D11", + title: "Working The Network", + description: "Financially established and techno savvy, highly educated singles who own their urban apartments and enjoy a fast paced lifestyle" + }, + { + id: "D12", + title: "Hash Tag Look At Me ", + description: "Fashion focused, social and technologically astute younger families, renting modern properties in the major cities" + }, + { + id: "D13", + title: "Sharing Spaces", + description: "Middle-aged home sharers, living in the suburbs who enjoy social networking and trying to find a balance between work and play" + }, + { + id: "D14", + title: "Touchscreens And Takeaways", + description: "Extended families in modern suburban houses, with low disposable income who like to stand out and are influenced by their social sphere" + }, + { + id: "D15", + title: "Halftime Hopes", + description: "Financially comfortable families who require technology to be practical, living in city apartments and optimistic about the future" + }, + { + id: "E16", + title: "Carefree Suburbia", + description: "Older families keeping an eye on their finances but enjoying an easy going life using traditional media to stay informed and up to date" + }, + { + id: "E17", + title: "Creatures Of Habit", + description: "Elderly couples enjoying a stress free life while residing in segregated neighbourhoods, and listening to the radio to stay in touch" + }, + { + id: "E18", + title: "Mortgages And Microwaves", + description: "Hands-on people who enjoy fixing and tinkering with cars and an active outdoor lifestyle who are balancing large financial commitments" + }, + { + id: "E19", + title: "Newspapers And Knitting", + description: "Senior, mainly divorced singles, retired and financially comfortable with traditional values, preferring bricks and mortar to online" + }, + { + id: "F20", + title: "Turbo Treadmills", + description: "Driven, degree-educated individuals in early stages of their careers, living in shared spaces and using their mobile to stay connected" + }, + { + id: "F21", + title: "Win The Better Life", + description: "Younger singles living in shared rental apartments where job security is important and are searching for something better in life" + }, + { + id: "F22", + title: "Just Add Water ", + description: "Young students in full time study who are connected 24/7, living in campus accommodation, spending their free time with friends" + }, + { + id: "G23", + title: "Messaging Motorheads", + description: "Mix of older and young singles renting in the suburbs, heavy texters and social networkers wanting to be taken seriously" + }, + { + id: "G24", + title: "Community Greys ", + description: "Retired, mainly single, elderly, living off their investments in retirement villages and taking each day as it comes" + }, + { + id: "G25", + title: "Talkback And Telly", + description: "Price sensitive seniors, renting government housing in rural locations, living a low-key lifestyle to keep on top of their finances" + }, + { + id: "H26", + title: "Fishing For A Bargain", + description: "Mature, dual income, family centric households in mortgaged moderate sized homes, on a tight budget and enjoy hunting for bargains" + }, + { + id: "H27", + title: "Hiring The Lifestyle", + description: "Shopping fanatic young families in small homes, with average incomes, who love loyalty cards and coupons, and pay attention to adverts" + }, + { + id: "H28", + title: "Remote Controlling", + description: "Busy mixed families on low incomes in rented government housing, where kids come first and who impulse purchase for the latest gadgets" + }, + { + id: "H29", + title: "Stately Renters ", + description: "Older single parents of Maori descent, living in state housing, who feel quite isolated and have financial challenges" + }, + { + id: "H30", + title: "Kids And Cars ", + description: "Single parents with young kids, living in some of the poorer areas with strong focus on their kids and a preference for online shopping" + }, + { + id: "I31", + title: "Window Shopping Strugglers", + description: "Ethnic minorities living in large multi family households struggling on low incomes, but with an active social life" + }, + { + id: "I32", + title: "Square Eyes And Empty Pockets", + description: "Singles on low incomes or benefits, living in Government housing, with a low key lifestyle and high television and radio consumption" + }, + { + id: "I33", + title: "Extending The Benefits", + description: "Large multi-family Maori households on low income or benefits,who enjoy down to earth pursuits and more traditional media channels" + }, + { + id: "I34", + title: "Play Dough And Pizza", + description: "Mixed family Maori and Pacific Islander households, with a strong focus on their young children but struggling financially" + } + ] + } +}; diff --git a/src/ts/datasets-codes.ts b/src/ts/datasets-codes.ts index 8736682..700bcf2 100644 --- a/src/ts/datasets-codes.ts +++ b/src/ts/datasets-codes.ts @@ -1,461 +1,464 @@ export const datasetCodes = [ {country: 'Afghanistan', iso3Code: 'AFG', iso2Code: 'AF', datasetCode: 'af-address-ed', searchType: 'singleline, validate'}, - {country: 'Afghanistan', iso3Code: 'AFG', iso2Code: 'AF', datasetCode: 'af-address-eh', searchType: 'autocomplete'}, + {country: 'Afghanistan', iso3Code: 'AFG', iso2Code: 'AF', datasetCode: 'af-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Albania', iso3Code: 'ALB', iso2Code: 'AL', datasetCode: 'al-address-ed', searchType: 'singleline, validate'}, - {country: 'Albania', iso3Code: 'ALB', iso2Code: 'AL', datasetCode: 'al-address-eh', searchType: 'autocomplete'}, + {country: 'Albania', iso3Code: 'ALB', iso2Code: 'AL', datasetCode: 'al-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Algeria', iso3Code: 'DZA', iso2Code: 'DZ', datasetCode: 'dz-address-ed', searchType: 'singleline, validate'}, - {country: 'Algeria', iso3Code: 'DZA', iso2Code: 'DZ', datasetCode: 'dz-address-eh', searchType: 'autocomplete'}, - {country: 'American Samoa', iso3Code: 'ASM', iso2Code: 'AS', datasetCode: 'as-address-eh', searchType: 'autocomplete'}, + {country: 'Algeria', iso3Code: 'DZA', iso2Code: 'DZ', datasetCode: 'dz-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'American Samoa', iso3Code: 'ASM', iso2Code: 'AS', datasetCode: 'as-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Andorra', iso3Code: 'AND', iso2Code: 'AD', datasetCode: 'ad-address-ed', searchType: 'singleline, validate'}, - {country: 'Andorra', iso3Code: 'AND', iso2Code: 'AD', datasetCode: 'ad-address-eh', searchType: 'autocomplete'}, + {country: 'Andorra', iso3Code: 'AND', iso2Code: 'AD', datasetCode: 'ad-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Angola', iso3Code: 'AGO', iso2Code: 'AO', datasetCode: 'ao-address-ed', searchType: 'singleline, validate'}, - {country: 'Angola', iso3Code: 'AGO', iso2Code: 'AO', datasetCode: 'ao-address-eh', searchType: 'autocomplete'}, - {country: 'Anguilla', iso3Code: 'AIA', iso2Code: 'AI', datasetCode: 'ai-address-eh', searchType: 'autocomplete'}, + {country: 'Angola', iso3Code: 'AGO', iso2Code: 'AO', datasetCode: 'ao-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Anguilla', iso3Code: 'AIA', iso2Code: 'AI', datasetCode: 'ai-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Antarctica', iso3Code: 'ATA', iso2Code: 'AQ', datasetCode: 'aq-address-ed', searchType: 'singleline, validate'}, {country: 'Antigua and Barbuda', iso3Code: 'ATG', iso2Code: 'AG', datasetCode: 'ag-address-ed', searchType: 'singleline, validate'}, - {country: 'Antigua and Barbuda', iso3Code: 'ATG', iso2Code: 'AG', datasetCode: 'ag-address-eh', searchType: 'autocomplete'}, + {country: 'Antigua and Barbuda', iso3Code: 'ATG', iso2Code: 'AG', datasetCode: 'ag-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Argentina', iso3Code: 'ARG', iso2Code: 'AR', datasetCode: 'ar-address-ed', searchType: 'singleline, validate'}, - {country: 'Argentina', iso3Code: 'ARG', iso2Code: 'AR', datasetCode: 'ar-address-eh', searchType: 'autocomplete'}, + {country: 'Argentina', iso3Code: 'ARG', iso2Code: 'AR', datasetCode: 'ar-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Armenia', iso3Code: 'ARM', iso2Code: 'AM', datasetCode: 'am-address-ed', searchType: 'singleline, validate'}, - {country: 'Armenia', iso3Code: 'ARM', iso2Code: 'AM', datasetCode: 'am-address-eh', searchType: 'autocomplete'}, + {country: 'Armenia', iso3Code: 'ARM', iso2Code: 'AM', datasetCode: 'am-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Aruba', iso3Code: 'ABW', iso2Code: 'AW', datasetCode: 'aw-address-ed', searchType: 'singleline, validate'}, - {country: 'Aruba', iso3Code: 'ABW', iso2Code: 'AW', datasetCode: 'aw-address-eh', searchType: 'autocomplete'}, - {country: 'Australia DataFusion', iso3Code: 'AUS', iso2Code: 'AU', datasetCode: 'au-address-datafusion', searchType: 'autocomplete, singleline, typedown'}, - {country: 'Australia Geocoded National Address', iso3Code: 'AUS', iso2Code: 'AU', datasetCode: 'au-address-gnaf', searchType: 'autocomplete, singleline, typedown, validate'}, - {country: 'Australia Postal Address', iso3Code: 'AUS', iso2Code: 'AU', datasetCode: 'au-address', searchType: 'autocomplete, singleline, typedown, validate'}, - {country: 'Austria', iso3Code: 'AUT', iso2Code: 'AT', datasetCode: 'at-address-eh', searchType: 'autocomplete'}, + {country: 'Aruba', iso3Code: 'ABW', iso2Code: 'AW', datasetCode: 'aw-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Australia DataFusion', iso3Code: 'AUS', iso2Code: 'AU', datasetCode: 'au-address-datafusion', searchType: 'autocomplete, singleline, typedown, lookupv2'}, + {country: 'Australia Geocoded National Address', iso3Code: 'AUS', iso2Code: 'AU', datasetCode: 'au-address-gnaf', searchType: 'autocomplete, singleline, typedown, validate, lookupv2'}, + {country: 'Australia Postal Address', iso3Code: 'AUS', iso2Code: 'AU', datasetCode: 'au-address', searchType: 'autocomplete, singleline, typedown, validate, lookupv2'}, + {country: 'Austria', iso3Code: 'AUT', iso2Code: 'AT', datasetCode: 'at-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Austria', iso3Code: 'AUT', iso2Code: 'AT', datasetCode: 'az-address-ed', searchType: 'singleline, validate'}, {country: 'Azerbaijan', iso3Code: 'AZE', iso2Code: 'AZ', datasetCode: 'az-address-ed', searchType: 'singleline, validate'}, - {country: 'Azerbaijan', iso3Code: 'AZE', iso2Code: 'AZ', datasetCode: 'az-address-eh', searchType: 'autocomplete'}, + {country: 'Azerbaijan', iso3Code: 'AZE', iso2Code: 'AZ', datasetCode: 'az-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Bahamas', iso3Code: 'BHS', iso2Code: 'BS', datasetCode: 'bs-address-ed', searchType: 'singleline, validate'}, - {country: 'Bahamas', iso3Code: 'BHS', iso2Code: 'BS', datasetCode: 'bs-address-eh', searchType: 'autocomplete'}, + {country: 'Bahamas', iso3Code: 'BHS', iso2Code: 'BS', datasetCode: 'bs-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Bahrain', iso3Code: 'BHR', iso2Code: 'BH', datasetCode: 'bh-address-ed', searchType: 'singleline, validate'}, - {country: 'Bahrain', iso3Code: 'BHR', iso2Code: 'BH', datasetCode: 'bh-address-eh', searchType: 'autocomplete'}, + {country: 'Bahrain', iso3Code: 'BHR', iso2Code: 'BH', datasetCode: 'bh-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Bangladesh', iso3Code: 'BGD', iso2Code: 'BD', datasetCode: 'bd-address-ed', searchType: 'singleline, validate'}, - {country: 'Bangladesh', iso3Code: 'BGD', iso2Code: 'BD', datasetCode: 'bd-address-eh', searchType: 'autocomplete'}, + {country: 'Bangladesh', iso3Code: 'BGD', iso2Code: 'BD', datasetCode: 'bd-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Barbados', iso3Code: 'BRB', iso2Code: 'BB', datasetCode: 'bb-address-ed', searchType: 'singleline, validate'}, - {country: 'Barbados', iso3Code: 'BRB', iso2Code: 'BB', datasetCode: 'bb-address-eh', searchType: 'autocomplete'}, + {country: 'Barbados', iso3Code: 'BRB', iso2Code: 'BB', datasetCode: 'bb-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Belarus', iso3Code: 'BLR', iso2Code: 'BY', datasetCode: 'by-address-ed', searchType: 'singleline, validate'}, - {country: 'Belarus', iso3Code: 'BLR', iso2Code: 'BY', datasetCode: 'by-address-eh', searchType: 'autocomplete'}, + {country: 'Belarus', iso3Code: 'BLR', iso2Code: 'BY', datasetCode: 'by-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Belgium', iso3Code: 'BEL', iso2Code: 'BE', datasetCode: 'be-address', searchType: 'singleline, typedown'}, {country: 'Belgium', iso3Code: 'BEL', iso2Code: 'BE', datasetCode: 'be-address-ed', searchType: ' validate'}, - {country: 'Belgium', iso3Code: 'BEL', iso2Code: 'BE', datasetCode: 'be-address-eh', searchType: 'autocomplete'}, + {country: 'Belgium', iso3Code: 'BEL', iso2Code: 'BE', datasetCode: 'be-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Belize', iso3Code: 'BLZ', iso2Code: 'BZ', datasetCode: 'bz-address-ed', searchType: 'singleline, validate'}, - {country: 'Belize', iso3Code: 'BLZ', iso2Code: 'BZ', datasetCode: 'bz-address-eh', searchType: 'autocomplete'}, + {country: 'Belize', iso3Code: 'BLZ', iso2Code: 'BZ', datasetCode: 'bz-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Benin', iso3Code: 'BEN', iso2Code: 'BJ', datasetCode: 'bj-address-ed', searchType: 'singleline, validate'}, - {country: 'Benin', iso3Code: 'BEN', iso2Code: 'BJ', datasetCode: 'bj-address-eh', searchType: 'autocomplete'}, + {country: 'Benin', iso3Code: 'BEN', iso2Code: 'BJ', datasetCode: 'bj-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Bermuda', iso3Code: 'BMU', iso2Code: 'BM', datasetCode: 'bm-address-ed', searchType: 'singleline, validate'}, - {country: 'Bermuda', iso3Code: 'BMU', iso2Code: 'BM', datasetCode: 'bm-address-eh', searchType: 'autocomplete'}, + {country: 'Bermuda', iso3Code: 'BMU', iso2Code: 'BM', datasetCode: 'bm-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Bhutan', iso3Code: 'BTN', iso2Code: 'BT', datasetCode: 'bt-address-ed', searchType: 'singleline, validate'}, - {country: 'Bhutan', iso3Code: 'BTN', iso2Code: 'BT', datasetCode: 'bt-address-eh', searchType: 'autocomplete'}, + {country: 'Bhutan', iso3Code: 'BTN', iso2Code: 'BT', datasetCode: 'bt-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Bolivia', iso3Code: 'BOL', iso2Code: 'BO', datasetCode: 'bo-address-ed', searchType: 'singleline, validate'}, - {country: 'Bolivia', iso3Code: 'BOL', iso2Code: 'BO', datasetCode: 'bo-address-eh', searchType: 'autocomplete'}, + {country: 'Bolivia', iso3Code: 'BOL', iso2Code: 'BO', datasetCode: 'bo-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Bonaire, Sint Eustatius and Saba', iso3Code: 'BES', iso2Code: 'BQ', datasetCode: 'bq-address-ed', searchType: 'singleline, validate'}, - {country: 'Bonaire, Sint Eustatius and Saba', iso3Code: 'BES', iso2Code: 'BQ', datasetCode: 'bq-address-eh', searchType: 'autocomplete'}, + {country: 'Bonaire, Sint Eustatius and Saba', iso3Code: 'BES', iso2Code: 'BQ', datasetCode: 'bq-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Bosnia and Herzegovina', iso3Code: 'BIH', iso2Code: 'BA', datasetCode: 'ba-address-ed', searchType: 'singleline, validate'}, - {country: 'Bosnia and Herzegovina', iso3Code: 'BIH', iso2Code: 'BA', datasetCode: 'ba-address-eh', searchType: 'autocomplete'}, + {country: 'Bosnia and Herzegovina', iso3Code: 'BIH', iso2Code: 'BA', datasetCode: 'ba-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Botswana', iso3Code: 'BWA', iso2Code: 'BW', datasetCode: 'bw-address-ed', searchType: 'singleline, validate'}, - {country: 'Botswana', iso3Code: 'BWA', iso2Code: 'BW', datasetCode: 'bw-address-eh', searchType: 'autocomplete'}, + {country: 'Botswana', iso3Code: 'BWA', iso2Code: 'BW', datasetCode: 'bw-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Brazil', iso3Code: 'BRA', iso2Code: 'BR', datasetCode: 'br-address-ed', searchType: 'singleline, validate'}, - {country: 'Brazil', iso3Code: 'BRA', iso2Code: 'BR', datasetCode: 'br-address-eh', searchType: 'autocomplete'}, + {country: 'Brazil', iso3Code: 'BRA', iso2Code: 'BR', datasetCode: 'br-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Brunei Darussalam', iso3Code: 'BRN', iso2Code: 'BN', datasetCode: 'bn-address-ed', searchType: 'singleline, validate'}, - {country: 'Brunei Darussalam', iso3Code: 'BRN', iso2Code: 'BN', datasetCode: 'bn-address-eh', searchType: 'autocomplete'}, + {country: 'Brunei Darussalam', iso3Code: 'BRN', iso2Code: 'BN', datasetCode: 'bn-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Bulgaria', iso3Code: 'BGR', iso2Code: 'BG', datasetCode: 'bg-address-ed', searchType: 'singleline, validate'}, - {country: 'Bulgaria', iso3Code: 'BGR', iso2Code: 'BG', datasetCode: 'bg-address-eh', searchType: 'autocomplete'}, + {country: 'Bulgaria', iso3Code: 'BGR', iso2Code: 'BG', datasetCode: 'bg-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Burkina Faso', iso3Code: 'BFA', iso2Code: 'BF', datasetCode: 'bf-address-ed', searchType: 'singleline, validate'}, - {country: 'Burkina Faso', iso3Code: 'BFA', iso2Code: 'BF', datasetCode: 'bf-address-eh', searchType: 'autocomplete'}, - {country: 'Burundi', iso3Code: 'BDI', iso2Code: 'BI', datasetCode: 'bi-address-eh', searchType: 'autocomplete'}, + {country: 'Burkina Faso', iso3Code: 'BFA', iso2Code: 'BF', datasetCode: 'bf-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Burundi', iso3Code: 'BDI', iso2Code: 'BI', datasetCode: 'bi-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Cambodia', iso3Code: 'KHM', iso2Code: 'KH', datasetCode: 'kh-address-ed', searchType: 'singleline, validate'}, - {country: 'Cambodia', iso3Code: 'KHM', iso2Code: 'KH', datasetCode: 'kh-address-eh', searchType: 'autocomplete'}, + {country: 'Cambodia', iso3Code: 'KHM', iso2Code: 'KH', datasetCode: 'kh-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Cameroon', iso3Code: 'CMR', iso2Code: 'CM', datasetCode: 'cm-address-ed', searchType: 'singleline, validate'}, - {country: 'Cameroon', iso3Code: 'CMR', iso2Code: 'CM', datasetCode: 'cm-address-eh', searchType: 'autocomplete'}, - {country: 'Canada', iso3Code: 'CAN', iso2Code: 'CA', datasetCode: 'ca-address', searchType: 'autocomplete, singleline, typedown, validate'}, + {country: 'Cameroon', iso3Code: 'CMR', iso2Code: 'CM', datasetCode: 'cm-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Canada', iso3Code: 'CAN', iso2Code: 'CA', datasetCode: 'ca-address', searchType: 'autocomplete, singleline, typedown, validate, lookupv2'}, {country: 'Cape Verde', iso3Code: 'CPV', iso2Code: 'CV', datasetCode: 'cv-address-ed', searchType: 'singleline, validate'}, - {country: 'Cape Verde', iso3Code: 'CPV', iso2Code: 'CV', datasetCode: 'cv-address-eh', searchType: 'autocomplete'}, + {country: 'Cape Verde', iso3Code: 'CPV', iso2Code: 'CV', datasetCode: 'cv-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Cayman Islands', iso3Code: 'CYM', iso2Code: 'KY', datasetCode: 'ky-address-ed', searchType: 'singleline, validate'}, - {country: 'Cayman Islands', iso3Code: 'CYM', iso2Code: 'KY', datasetCode: 'ky-address-eh', searchType: 'autocomplete'}, + {country: 'Cayman Islands', iso3Code: 'CYM', iso2Code: 'KY', datasetCode: 'ky-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Central African Republic', iso3Code: 'CAF', iso2Code: 'CF', datasetCode: 'cf-address-ed', searchType: 'singleline, validate'}, - {country: 'Central African Republic', iso3Code: 'CAF', iso2Code: 'CF', datasetCode: 'cf-address-eh', searchType: 'autocomplete'}, + {country: 'Central African Republic', iso3Code: 'CAF', iso2Code: 'CF', datasetCode: 'cf-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Chad', iso3Code: 'TCD', iso2Code: 'TD', datasetCode: 'td-address-ed', searchType: 'singleline, validate'}, - {country: 'Chad', iso3Code: 'TCD', iso2Code: 'TD', datasetCode: 'td-address-eh', searchType: 'autocomplete'}, + {country: 'Chad', iso3Code: 'TCD', iso2Code: 'TD', datasetCode: 'td-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Chile', iso3Code: 'CHL', iso2Code: 'CL', datasetCode: 'cl-address-ed', searchType: 'singleline, validate'}, - {country: 'Chile', iso3Code: 'CHL', iso2Code: 'CL', datasetCode: 'cl-address-eh', searchType: 'autocomplete'}, + {country: 'Chile', iso3Code: 'CHL', iso2Code: 'CL', datasetCode: 'cl-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'China', iso3Code: 'CHN', iso2Code: 'CN', datasetCode: 'cn-address-ed', searchType: 'singleline, validate'}, - {country: 'China', iso3Code: 'CHN', iso2Code: 'CN', datasetCode: 'cn-address-eh', searchType: 'autocomplete'}, - {country: 'Christmas Island', iso3Code: 'CXR', iso2Code: 'CX', datasetCode: 'cx-address-eh', searchType: 'autocomplete'}, - {country: 'Cocos Island', iso3Code: 'CCK', iso2Code: 'CC', datasetCode: 'cc-address-eh', searchType: 'autocomplete'}, + {country: 'China', iso3Code: 'CHN', iso2Code: 'CN', datasetCode: 'cn-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Christmas Island', iso3Code: 'CXR', iso2Code: 'CX', datasetCode: 'cx-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Cocos Island', iso3Code: 'CCK', iso2Code: 'CC', datasetCode: 'cc-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Colombia', iso3Code: 'COL', iso2Code: 'CO', datasetCode: 'co-address-ed', searchType: 'singleline, validate'}, - {country: 'Colombia', iso3Code: 'COL', iso2Code: 'CO', datasetCode: 'co-address-eh', searchType: 'autocomplete'}, + {country: 'Colombia', iso3Code: 'COL', iso2Code: 'CO', datasetCode: 'co-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Comoros', iso3Code: 'COM', iso2Code: 'KM', datasetCode: 'km-address-ed', searchType: 'singleline, validate'}, - {country: 'Comoros', iso3Code: 'COM', iso2Code: 'KM', datasetCode: 'km-address-eh', searchType: 'autocomplete'}, + {country: 'Comoros', iso3Code: 'COM', iso2Code: 'KM', datasetCode: 'km-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Congo', iso3Code: 'COG', iso2Code: 'CG', datasetCode: 'cg-address-ed', searchType: 'singleline, validate'}, - {country: 'Congo', iso3Code: 'COG', iso2Code: 'CG', datasetCode: 'cg-address-eh', searchType: 'autocomplete'}, + {country: 'Congo', iso3Code: 'COG', iso2Code: 'CG', datasetCode: 'cg-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Congo, The Democratic Republic of the', iso3Code: 'COD', iso2Code: 'CD', datasetCode: 'cd-address-ed', searchType: 'singleline, validate'}, - {country: 'Congo, The Democratic Republic of the', iso3Code: 'COD', iso2Code: 'CD', datasetCode: 'cd-address-eh', searchType: 'autocomplete'}, + {country: 'Congo, The Democratic Republic of the', iso3Code: 'COD', iso2Code: 'CD', datasetCode: 'cd-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Cook Islands', iso3Code: 'COK', iso2Code: 'CK', datasetCode: 'ck-address-ed', searchType: 'singleline, validate'}, - {country: 'Cook Islands', iso3Code: 'COK', iso2Code: 'CK', datasetCode: 'ck-address-eh', searchType: 'autocomplete'}, + {country: 'Cook Islands', iso3Code: 'COK', iso2Code: 'CK', datasetCode: 'ck-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Costa Rica', iso3Code: 'CRI', iso2Code: 'CR', datasetCode: 'cr-address-ed', searchType: 'singleline, validate'}, - {country: 'Costa Rica', iso3Code: 'CRI', iso2Code: 'CR', datasetCode: 'cr-address-eh', searchType: 'autocomplete'}, + {country: 'Costa Rica', iso3Code: 'CRI', iso2Code: 'CR', datasetCode: 'cr-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Croatia', iso3Code: 'HRV', iso2Code: 'HR', datasetCode: 'hr-address-ed', searchType: 'singleline, validate'}, - {country: 'Croatia', iso3Code: 'HRV', iso2Code: 'HR', datasetCode: 'hr-address-eh', searchType: 'autocomplete'}, + {country: 'Croatia', iso3Code: 'HRV', iso2Code: 'HR', datasetCode: 'hr-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Cuba', iso3Code: 'CUB', iso2Code: 'CU', datasetCode: 'cu-address-ed', searchType: 'singleline, validate'}, - {country: 'Cuba', iso3Code: 'CUB', iso2Code: 'CU', datasetCode: 'cu-address-eh', searchType: 'autocomplete'}, + {country: 'Cuba', iso3Code: 'CUB', iso2Code: 'CU', datasetCode: 'cu-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Curaçao', iso3Code: 'CUW', iso2Code: 'CW', datasetCode: 'cw-address-ed', searchType: 'singleline, validate'}, - {country: 'Curaçao', iso3Code: 'CUW', iso2Code: 'CW', datasetCode: 'cw-address-eh', searchType: 'autocomplete'}, + {country: 'Curaçao', iso3Code: 'CUW', iso2Code: 'CW', datasetCode: 'cw-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Cyprus', iso3Code: 'CYP', iso2Code: 'CY', datasetCode: 'cy-address-ed', searchType: 'singleline, validate'}, - {country: 'Cyprus', iso3Code: 'CYP', iso2Code: 'CY', datasetCode: 'cy-address-eh', searchType: 'autocomplete'}, + {country: 'Cyprus', iso3Code: 'CYP', iso2Code: 'CY', datasetCode: 'cy-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Czech Republic', iso3Code: 'CZE', iso2Code: 'CZ', datasetCode: 'cz-address-ed', searchType: 'singleline, validate'}, - {country: 'Czech Republic', iso3Code: 'CZE', iso2Code: 'CZ', datasetCode: 'cz-address-eh', searchType: 'autocomplete'}, + {country: 'Czech Republic', iso3Code: 'CZE', iso2Code: 'CZ', datasetCode: 'cz-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Côte d\'Ivoire', iso3Code: 'CIV', iso2Code: 'CI', datasetCode: 'ci-address-ed', searchType: 'singleline, validate'}, - {country: 'Côte d\'Ivoire', iso3Code: 'CIV', iso2Code: 'CI', datasetCode: 'ci-address-eh', searchType: 'autocomplete'}, - {country: 'Denmark', iso3Code: 'DNK', iso2Code: 'DK', datasetCode: 'dk-address-ed', searchType: 'singleline, validate'}, - {country: 'Denmark', iso3Code: 'DNK', iso2Code: 'DK', datasetCode: 'dk-address-eh', searchType: 'autocomplete'}, + {country: 'Côte d\'Ivoire', iso3Code: 'CIV', iso2Code: 'CI', datasetCode: 'ci-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Denmark', iso3Code: 'DNK', iso2Code: 'DK', datasetCode: 'dk-address', searchType: 'singleline, typedown, validate'}, + {country: 'Denmark', iso3Code: 'DNK', iso2Code: 'DK', datasetCode: 'dk-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Djibouti', iso3Code: 'DJI', iso2Code: 'DJ', datasetCode: 'dj-address-ed', searchType: 'singleline, validate'}, - {country: 'Djibouti', iso3Code: 'DJI', iso2Code: 'DJ', datasetCode: 'dj-address-eh', searchType: 'autocomplete'}, + {country: 'Djibouti', iso3Code: 'DJI', iso2Code: 'DJ', datasetCode: 'dj-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Dominica', iso3Code: 'DMA', iso2Code: 'DM', datasetCode: 'dm-address-ed', searchType: 'singleline, validate'}, - {country: 'Dominica', iso3Code: 'DMA', iso2Code: 'DM', datasetCode: 'dm-address-eh', searchType: 'autocomplete'}, + {country: 'Dominica', iso3Code: 'DMA', iso2Code: 'DM', datasetCode: 'dm-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Dominican Republic', iso3Code: 'DOM', iso2Code: 'DO', datasetCode: 'do-address-ed', searchType: 'singleline, validate'}, - {country: 'Dominican Republic', iso3Code: 'DOM', iso2Code: 'DO', datasetCode: 'do-address-eh', searchType: 'autocomplete'}, + {country: 'Dominican Republic', iso3Code: 'DOM', iso2Code: 'DO', datasetCode: 'do-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Ecuador', iso3Code: 'ECU', iso2Code: 'EC', datasetCode: 'ec-address-ed', searchType: 'singleline, validate'}, - {country: 'Ecuador', iso3Code: 'ECU', iso2Code: 'EC', datasetCode: 'ec-address-eh', searchType: 'autocomplete'}, + {country: 'Ecuador', iso3Code: 'ECU', iso2Code: 'EC', datasetCode: 'ec-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Egypt', iso3Code: 'EGY', iso2Code: 'EG', datasetCode: 'eg-address-ed', searchType: 'singleline, validate'}, - {country: 'Egypt', iso3Code: 'EGY', iso2Code: 'EG', datasetCode: 'eg-address-eh', searchType: 'autocomplete'}, + {country: 'Egypt', iso3Code: 'EGY', iso2Code: 'EG', datasetCode: 'eg-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'El Salvador', iso3Code: 'SLV', iso2Code: 'SV', datasetCode: 'sv-address-ed', searchType: 'singleline, validate'}, - {country: 'El Salvador', iso3Code: 'SLV', iso2Code: 'SV', datasetCode: 'sv-address-eh', searchType: 'autocomplete'}, + {country: 'El Salvador', iso3Code: 'SLV', iso2Code: 'SV', datasetCode: 'sv-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Equatorial Guinea', iso3Code: 'GNQ', iso2Code: 'GQ', datasetCode: 'gq-address-ed', searchType: 'singleline, validate'}, - {country: 'Equatorial Guinea', iso3Code: 'GNQ', iso2Code: 'GQ', datasetCode: 'gq-address-eh', searchType: 'autocomplete'}, + {country: 'Equatorial Guinea', iso3Code: 'GNQ', iso2Code: 'GQ', datasetCode: 'gq-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Eritrea', iso3Code: 'ERI', iso2Code: 'ER', datasetCode: 'er-address-ed', searchType: 'singleline, validate'}, - {country: 'Eritrea', iso3Code: 'ERI', iso2Code: 'ER', datasetCode: 'er-address-eh', searchType: 'autocomplete'}, + {country: 'Eritrea', iso3Code: 'ERI', iso2Code: 'ER', datasetCode: 'er-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Estonia', iso3Code: 'EST', iso2Code: 'EE', datasetCode: 'ee-address-ed', searchType: 'singleline, validate'}, - {country: 'Estonia', iso3Code: 'EST', iso2Code: 'EE', datasetCode: 'ee-address-eh', searchType: 'autocomplete'}, + {country: 'Estonia', iso3Code: 'EST', iso2Code: 'EE', datasetCode: 'ee-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Ethiopia', iso3Code: 'ETH', iso2Code: 'ET', datasetCode: 'et-address-ed', searchType: 'singleline, validate'}, - {country: 'Ethiopia', iso3Code: 'ETH', iso2Code: 'ET', datasetCode: 'et-address-eh', searchType: 'autocomplete'}, - {country: 'Falkland Islands (Malvinas)', iso3Code: 'FLK', iso2Code: 'FK', datasetCode: 'fk-address-eh', searchType: 'autocomplete'}, + {country: 'Ethiopia', iso3Code: 'ETH', iso2Code: 'ET', datasetCode: 'et-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Falkland Islands (Malvinas)', iso3Code: 'FLK', iso2Code: 'FK', datasetCode: 'fk-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Faroe Islands', iso3Code: 'FRO', iso2Code: 'FO', datasetCode: 'fo-address-ed', searchType: 'singleline, validate'}, - {country: 'Faroe Islands', iso3Code: 'FRO', iso2Code: 'FO', datasetCode: 'fo-address-eh', searchType: 'autocomplete'}, + {country: 'Faroe Islands', iso3Code: 'FRO', iso2Code: 'FO', datasetCode: 'fo-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Fiji', iso3Code: 'FJI', iso2Code: 'FJ', datasetCode: 'fj-address-ed', searchType: 'singleline, validate'}, - {country: 'Fiji', iso3Code: 'FJI', iso2Code: 'FJ', datasetCode: 'fj-address-eh', searchType: 'autocomplete'}, + {country: 'Fiji', iso3Code: 'FJI', iso2Code: 'FJ', datasetCode: 'fj-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Finland', iso3Code: 'FIN', iso2Code: 'FI', datasetCode: 'fi-address', searchType: 'singleline, typedown'}, {country: 'Finland', iso3Code: 'FIN', iso2Code: 'FI', datasetCode: 'fi-address-ed', searchType: 'validate'}, - {country: 'Finland', iso3Code: 'FIN', iso2Code: 'FI', datasetCode: 'fi-address-eh', searchType: 'autocomplete'}, + {country: 'Finland', iso3Code: 'FIN', iso2Code: 'FI', datasetCode: 'fi-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'France Street Level', iso3Code: 'FRA', iso2Code: 'FR', datasetCode: 'fr-address-streetlevel', searchType: 'singleline, typedown, validate'}, {country: 'France Sub-Premises Level', iso3Code: 'FRA', iso2Code: 'FR', datasetCode: 'fr-additional-hexaline3', searchType: 'autocomplete, singleline, typedown'}, {country: 'France Premises Level', iso3Code: 'FRA', iso2Code: 'FR', datasetCode: 'fr-address', searchType: 'singleline, typedown, validate'}, - {country: 'French Guiana', iso3Code: 'GUF', iso2Code: 'GF', datasetCode: 'gf-address-eh', searchType: 'autocomplete'}, - {country: 'French Polynesia', iso3Code: 'PYF', iso2Code: 'PF', datasetCode: 'pf-address-eh', searchType: 'autocomplete'}, + {country: 'French Guiana', iso3Code: 'GUF', iso2Code: 'GF', datasetCode: 'gf-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'French Polynesia', iso3Code: 'PYF', iso2Code: 'PF', datasetCode: 'pf-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Gabon', iso3Code: 'GAB', iso2Code: 'GA', datasetCode: 'ga-address-ed', searchType: 'singleline, validate'}, - {country: 'Gabon', iso3Code: 'GAB', iso2Code: 'GA', datasetCode: 'ga-address-eh', searchType: 'autocomplete'}, + {country: 'Gabon', iso3Code: 'GAB', iso2Code: 'GA', datasetCode: 'ga-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Gambia', iso3Code: 'GMB', iso2Code: 'GM', datasetCode: 'gm-address-ed', searchType: 'singleline, validate'}, - {country: 'Gambia', iso3Code: 'GMB', iso2Code: 'GM', datasetCode: 'gm-address-eh', searchType: 'autocomplete'}, + {country: 'Gambia', iso3Code: 'GMB', iso2Code: 'GM', datasetCode: 'gm-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Georgia', iso3Code: 'GEO', iso2Code: 'GE', datasetCode: 'ge-address-ed', searchType: 'singleline, validate'}, - {country: 'Georgia', iso3Code: 'GEO', iso2Code: 'GE', datasetCode: 'ge-address-eh', searchType: 'autocomplete'}, + {country: 'Georgia', iso3Code: 'GEO', iso2Code: 'GE', datasetCode: 'ge-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Germany', iso3Code: 'DEU', iso2Code: 'DE', datasetCode: 'de-address', searchType: 'singleline, typedown, validate'}, {country: 'Germany', iso3Code: 'DEU', iso2Code: 'DE', datasetCode: 'de-address-ed', searchType: 'validate'}, - {country: 'Germany', iso3Code: 'DEU', iso2Code: 'DE', datasetCode: 'de-address-eh', searchType: 'autocomplete'}, + {country: 'Germany', iso3Code: 'DEU', iso2Code: 'DE', datasetCode: 'de-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Ghana', iso3Code: 'GHA', iso2Code: 'GH', datasetCode: 'gh-address-ed', searchType: 'singleline, validate'}, - {country: 'Ghana', iso3Code: 'GHA', iso2Code: 'GH', datasetCode: 'gh-address-eh', searchType: 'autocomplete'}, - {country: 'Gibraltar', iso3Code: 'GIB', iso2Code: 'GI', datasetCode: 'gi-address-eh', searchType: 'autocomplete'}, + {country: 'Ghana', iso3Code: 'GHA', iso2Code: 'GH', datasetCode: 'gh-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Gibraltar', iso3Code: 'GIB', iso2Code: 'GI', datasetCode: 'gi-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Greece', iso3Code: 'GRC', iso2Code: 'GR', datasetCode: 'gr-address-ed', searchType: 'singleline, validate'}, - {country: 'Greece', iso3Code: 'GRC', iso2Code: 'GR', datasetCode: 'gr-address-eh', searchType: 'autocomplete'}, + {country: 'Greece', iso3Code: 'GRC', iso2Code: 'GR', datasetCode: 'gr-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Greenland', iso3Code: 'GRL', iso2Code: 'GL', datasetCode: 'gl-address-ed', searchType: 'singleline, validate'}, - {country: 'Greenland', iso3Code: 'GRL', iso2Code: 'GL', datasetCode: 'gl-address-eh', searchType: 'autocomplete'}, + {country: 'Greenland', iso3Code: 'GRL', iso2Code: 'GL', datasetCode: 'gl-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Grenada', iso3Code: 'GRD', iso2Code: 'GD', datasetCode: 'gd-address-ed', searchType: 'singleline, validate'}, - {country: 'Grenada', iso3Code: 'GRD', iso2Code: 'GD', datasetCode: 'gd-address-eh', searchType: 'autocomplete'}, - {country: 'Guadeloupe', iso3Code: 'GLP', iso2Code: 'GP', datasetCode: 'gp-address-eh', searchType: 'autocomplete'}, - {country: 'Guam', iso3Code: 'GUM', iso2Code: 'GU', datasetCode: 'gu-address-eh', searchType: 'autocomplete'}, + {country: 'Grenada', iso3Code: 'GRD', iso2Code: 'GD', datasetCode: 'gd-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Guadeloupe', iso3Code: 'GLP', iso2Code: 'GP', datasetCode: 'gp-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Guam', iso3Code: 'GUM', iso2Code: 'GU', datasetCode: 'gu-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Guatemala', iso3Code: 'GTM', iso2Code: 'GT', datasetCode: 'gt-address-ed', searchType: 'singleline, validate'}, - {country: 'Guatemala', iso3Code: 'GTM', iso2Code: 'GT', datasetCode: 'gt-address-eh', searchType: 'autocomplete'}, + {country: 'Guatemala', iso3Code: 'GTM', iso2Code: 'GT', datasetCode: 'gt-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Guinea', iso3Code: 'GIN', iso2Code: 'GN', datasetCode: 'gn-address-ed', searchType: 'singleline, validate'}, - {country: 'Guinea', iso3Code: 'GIN', iso2Code: 'GN', datasetCode: 'gn-address-eh', searchType: 'autocomplete'}, + {country: 'Guinea', iso3Code: 'GIN', iso2Code: 'GN', datasetCode: 'gn-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Guinea-Bissau', iso3Code: 'GNB', iso2Code: 'GW', datasetCode: 'gw-address-ed', searchType: 'singleline, validate'}, - {country: 'Guinea-Bissau', iso3Code: 'GNB', iso2Code: 'GW', datasetCode: 'gw-address-eh', searchType: 'autocomplete'}, + {country: 'Guinea-Bissau', iso3Code: 'GNB', iso2Code: 'GW', datasetCode: 'gw-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Guyana', iso3Code: 'GUY', iso2Code: 'GY', datasetCode: 'gy-address-ed', searchType: 'singleline, validate'}, - {country: 'Guyana', iso3Code: 'GUY', iso2Code: 'GY', datasetCode: 'gy-address-eh', searchType: 'autocomplete'}, + {country: 'Guyana', iso3Code: 'GUY', iso2Code: 'GY', datasetCode: 'gy-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Haiti', iso3Code: 'HTI', iso2Code: 'HT', datasetCode: 'ht-address-ed', searchType: 'singleline, validate'}, - {country: 'Haiti', iso3Code: 'HTI', iso2Code: 'HT', datasetCode: 'ht-address-eh', searchType: 'autocomplete'}, + {country: 'Haiti', iso3Code: 'HTI', iso2Code: 'HT', datasetCode: 'ht-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Honduras', iso3Code: 'HND', iso2Code: 'HN', datasetCode: 'hn-address-ed', searchType: 'singleline, validate'}, - {country: 'Honduras', iso3Code: 'HND', iso2Code: 'HN', datasetCode: 'hn-address-eh', searchType: 'autocomplete'}, + {country: 'Honduras', iso3Code: 'HND', iso2Code: 'HN', datasetCode: 'hn-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Hong Kong', iso3Code: 'HKG', iso2Code: 'HK', datasetCode: 'hk-address-ed', searchType: 'singleline, validate'}, - {country: 'Hong Kong', iso3Code: 'HKG', iso2Code: 'HK', datasetCode: 'hk-address-eh', searchType: 'autocomplete'}, + {country: 'Hong Kong', iso3Code: 'HKG', iso2Code: 'HK', datasetCode: 'hk-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Hungary', iso3Code: 'HUN', iso2Code: 'HU', datasetCode: 'hu-address-ed', searchType: 'singleline, validate'}, - {country: 'Hungary', iso3Code: 'HUN', iso2Code: 'HU', datasetCode: 'hu-address-eh', searchType: 'autocomplete'}, + {country: 'Hungary', iso3Code: 'HUN', iso2Code: 'HU', datasetCode: 'hu-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Iceland', iso3Code: 'ISL', iso2Code: 'IS', datasetCode: 'is-address-ed', searchType: 'singleline, validate'}, - {country: 'Iceland', iso3Code: 'ISL', iso2Code: 'IS', datasetCode: 'is-address-eh', searchType: 'autocomplete'}, + {country: 'Iceland', iso3Code: 'ISL', iso2Code: 'IS', datasetCode: 'is-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'India', iso3Code: 'IND', iso2Code: 'IN', datasetCode: 'in-address-ed', searchType: 'singleline, validate'}, - {country: 'India', iso3Code: 'IND', iso2Code: 'IN', datasetCode: 'in-address-eh', searchType: 'autocomplete'}, + {country: 'India', iso3Code: 'IND', iso2Code: 'IN', datasetCode: 'in-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Indonesia', iso3Code: 'IDN', iso2Code: 'ID', datasetCode: 'id-address-ed', searchType: 'singleline, validate'}, - {country: 'Indonesia', iso3Code: 'IDN', iso2Code: 'ID', datasetCode: 'id-address-eh', searchType: 'autocomplete'}, + {country: 'Indonesia', iso3Code: 'IDN', iso2Code: 'ID', datasetCode: 'id-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Iran, Islamic Republic of', iso3Code: 'IRN', iso2Code: 'IR', datasetCode: 'ir-address-ed', searchType: 'singleline, validate'}, - {country: 'Iran, Islamic Republic of', iso3Code: 'IRN', iso2Code: 'IR', datasetCode: 'ir-address-eh', searchType: 'autocomplete'}, + {country: 'Iran, Islamic Republic of', iso3Code: 'IRN', iso2Code: 'IR', datasetCode: 'ir-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Iraq', iso3Code: 'IRQ', iso2Code: 'IQ', datasetCode: 'iq-address-ed', searchType: 'singleline, validate'}, - {country: 'Iraq', iso3Code: 'IRQ', iso2Code: 'IQ', datasetCode: 'iq-address-eh', searchType: 'autocomplete'}, + {country: 'Iraq', iso3Code: 'IRQ', iso2Code: 'IQ', datasetCode: 'iq-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Ireland', iso3Code: 'IRL', iso2Code: 'IE', datasetCode: 'ie-address', searchType: 'singleline, typedown'}, - {country: 'Ireland', iso3Code: 'IRL', iso2Code: 'IE', datasetCode: 'ie-address-ed', searchType: 'singleline, validate'}, - {country: 'Ireland', iso3Code: 'IRL', iso2Code: 'IE', datasetCode: 'ie-address-eh', searchType: 'autocomplete'}, - {country: 'Ireland Eircode', iso3Code: 'IRL', iso2Code: 'IE', datasetCode: 'ie-additional-eircode', searchType: 'autocomplete'}, - {country: 'Ireland ECAD', iso3Code: 'IRL', iso2Code: 'IE', datasetCode: 'ie-address-ecad', searchType: 'autocomplete'}, + {country: 'Ireland', iso3Code: 'IRL', iso2Code: 'IE', datasetCode: 'ie-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Ireland Eircode', iso3Code: 'IRL', iso2Code: 'IE', datasetCode: 'ie-additional-eircode', searchType: 'autocomplete, lookupv2'}, + {country: 'Ireland ECAD', iso3Code: 'IRL', iso2Code: 'IE', datasetCode: 'ie-address-ecad', searchType: 'autocomplete, lookupv2, singleline, typedown'}, {country: 'Israel', iso3Code: 'ISR', iso2Code: 'IL', datasetCode: 'il-address-ed', searchType: 'singleline, validate'}, - {country: 'Israel', iso3Code: 'ISR', iso2Code: 'IL', datasetCode: 'il-address-eh', searchType: 'autocomplete'}, + {country: 'Israel', iso3Code: 'ISR', iso2Code: 'IL', datasetCode: 'il-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Italy', iso3Code: 'ITA', iso2Code: 'IT', datasetCode: 'it-address-ed', searchType: 'singleline, validate'}, - {country: 'Italy', iso3Code: 'ITA', iso2Code: 'IT', datasetCode: 'it-address-eh', searchType: 'autocomplete'}, + {country: 'Italy', iso3Code: 'ITA', iso2Code: 'IT', datasetCode: 'it-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Jamaica', iso3Code: 'JAM', iso2Code: 'JM', datasetCode: 'jm-address-ed', searchType: 'singleline, validate'}, - {country: 'Jamaica', iso3Code: 'JAM', iso2Code: 'JM', datasetCode: 'jm-address-eh', searchType: 'autocomplete'}, + {country: 'Jamaica', iso3Code: 'JAM', iso2Code: 'JM', datasetCode: 'jm-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Japan', iso3Code: 'JPN', iso2Code: 'JP', datasetCode: 'jp-address-ed', searchType: 'singleline, validate'}, - {country: 'Japan', iso3Code: 'JPN', iso2Code: 'JP', datasetCode: 'jp-address', searchType: 'singleline, validate'}, + {country: 'Japan', iso3Code: 'JPN', iso2Code: 'JP', datasetCode: 'jp-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Jordan', iso3Code: 'JOR', iso2Code: 'JO', datasetCode: 'jo-address-ed', searchType: 'singleline, validate'}, - {country: 'Jordan', iso3Code: 'JOR', iso2Code: 'JO', datasetCode: 'jo-address-eh', searchType: 'autocomplete'}, + {country: 'Jordan', iso3Code: 'JOR', iso2Code: 'JO', datasetCode: 'jo-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Kazakhstan', iso3Code: 'KAZ', iso2Code: 'KZ', datasetCode: 'kz-address-ed', searchType: 'singleline, validate'}, - {country: 'Kazakhstan', iso3Code: 'KAZ', iso2Code: 'KZ', datasetCode: 'kz-address-eh', searchType: 'autocomplete'}, + {country: 'Kazakhstan', iso3Code: 'KAZ', iso2Code: 'KZ', datasetCode: 'kz-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Kenya', iso3Code: 'KEN', iso2Code: 'KE', datasetCode: 'ke-address-ed', searchType: 'singleline, validate'}, - {country: 'Kenya', iso3Code: 'KEN', iso2Code: 'KE', datasetCode: 'ke-address-eh', searchType: 'autocomplete'}, + {country: 'Kenya', iso3Code: 'KEN', iso2Code: 'KE', datasetCode: 'ke-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Kiribati', iso3Code: 'KIR', iso2Code: 'KI', datasetCode: 'ki-address-ed', searchType: 'singleline, validate'}, - {country: 'Kiribati', iso3Code: 'KIR', iso2Code: 'KI', datasetCode: 'ki-address-eh', searchType: 'autocomplete'}, + {country: 'Kiribati', iso3Code: 'KIR', iso2Code: 'KI', datasetCode: 'ki-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Korea, Democratic People\'s Republic of', iso3Code: 'PRK', iso2Code: 'KP', datasetCode: 'kp-address-ed', searchType: 'singleline, validate'}, - {country: 'Korea, Democratic People\'s Republic of', iso3Code: 'PRK', iso2Code: 'KP', datasetCode: 'kp-address-eh', searchType: 'autocomplete'}, + {country: 'Korea, Democratic People\'s Republic of', iso3Code: 'PRK', iso2Code: 'KP', datasetCode: 'kp-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Korea, Republic of', iso3Code: 'KOR', iso2Code: 'KR', datasetCode: 'kr-address-ed', searchType: 'singleline, validate'}, - {country: 'Korea, Republic of', iso3Code: 'KOR', iso2Code: 'KR', datasetCode: 'kr-address-eh', searchType: 'autocomplete'}, - {country: 'Kosovo', iso3Code: 'KOS', iso2Code: 'XK', datasetCode: 'kv-address-eh', searchType: 'autocomplete'}, + {country: 'Korea, Republic of', iso3Code: 'KOR', iso2Code: 'KR', datasetCode: 'kr-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Kosovo', iso3Code: 'KOS', iso2Code: 'XK', datasetCode: 'kv-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Kuwait', iso3Code: 'KWT', iso2Code: 'KW', datasetCode: 'kw-address-ed', searchType: 'singleline, validate'}, - {country: 'Kuwait', iso3Code: 'KWT', iso2Code: 'KW', datasetCode: 'kw-address-eh', searchType: 'autocomplete'}, + {country: 'Kuwait', iso3Code: 'KWT', iso2Code: 'KW', datasetCode: 'kw-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Kyrgyzstan', iso3Code: 'KGZ', iso2Code: 'KG', datasetCode: 'kg-address-ed', searchType: 'singleline, validate'}, - {country: 'Kyrgyzstan', iso3Code: 'KGZ', iso2Code: 'KG', datasetCode: 'kg-address-eh', searchType: 'autocomplete'}, + {country: 'Kyrgyzstan', iso3Code: 'KGZ', iso2Code: 'KG', datasetCode: 'kg-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Laos', iso3Code: 'LAO', iso2Code: 'LA', datasetCode: 'la-address-ed', searchType: 'singleline, validate'}, - {country: 'Laos', iso3Code: 'LAO', iso2Code: 'LA', datasetCode: 'la-address-eh', searchType: 'autocomplete'}, + {country: 'Laos', iso3Code: 'LAO', iso2Code: 'LA', datasetCode: 'la-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Latvia', iso3Code: 'LVA', iso2Code: 'LV', datasetCode: 'lv-address-ed', searchType: 'singleline, validate'}, - {country: 'Latvia', iso3Code: 'LVA', iso2Code: 'LV', datasetCode: 'lv-address-eh', searchType: 'autocomplete'}, + {country: 'Latvia', iso3Code: 'LVA', iso2Code: 'LV', datasetCode: 'lv-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Lebanon', iso3Code: 'LBN', iso2Code: 'LB', datasetCode: 'lb-address-ed', searchType: 'singleline, validate'}, - {country: 'Lebanon', iso3Code: 'LBN', iso2Code: 'LB', datasetCode: 'lb-address-eh', searchType: 'autocomplete'}, + {country: 'Lebanon', iso3Code: 'LBN', iso2Code: 'LB', datasetCode: 'lb-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Lesotho', iso3Code: 'LSO', iso2Code: 'LS', datasetCode: 'ls-address-ed', searchType: 'singleline, validate'}, - {country: 'Lesotho', iso3Code: 'LSO', iso2Code: 'LS', datasetCode: 'ls-address-eh', searchType: 'autocomplete'}, + {country: 'Lesotho', iso3Code: 'LSO', iso2Code: 'LS', datasetCode: 'ls-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Liberia', iso3Code: 'LBR', iso2Code: 'LR', datasetCode: 'lr-address-ed', searchType: 'singleline, validate'}, - {country: 'Liberia', iso3Code: 'LBR', iso2Code: 'LR', datasetCode: 'lr-address-eh', searchType: 'autocomplete'}, + {country: 'Liberia', iso3Code: 'LBR', iso2Code: 'LR', datasetCode: 'lr-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Libya', iso3Code: 'LBY', iso2Code: 'LY', datasetCode: 'ly-address-ed', searchType: 'singleline, validate'}, - {country: 'Libya', iso3Code: 'LBY', iso2Code: 'LY', datasetCode: 'ly-address-eh', searchType: 'autocomplete'}, + {country: 'Libya', iso3Code: 'LBY', iso2Code: 'LY', datasetCode: 'ly-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Liechtenstein', iso3Code: 'LIE', iso2Code: 'LI', datasetCode: 'li-address-ed', searchType: 'singleline, validate'}, - {country: 'Liechtenstein', iso3Code: 'LIE', iso2Code: 'LI', datasetCode: 'li-address-eh', searchType: 'autocomplete'}, + {country: 'Liechtenstein', iso3Code: 'LIE', iso2Code: 'LI', datasetCode: 'li-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Lithuania', iso3Code: 'LTU', iso2Code: 'LT', datasetCode: 'lt-address-ed', searchType: 'singleline, validate'}, - {country: 'Lithuania', iso3Code: 'LTU', iso2Code: 'LT', datasetCode: 'lt-address-eh', searchType: 'autocomplete'}, - {country: 'Luxembourg', iso3Code: 'LUX', iso2Code: 'LU', datasetCode: 'lu-address-ed', searchType: 'singleline, validate'}, - {country: 'Luxembourg', iso3Code: 'LUX', iso2Code: 'LU', datasetCode: 'lu-address-eh', searchType: 'autocomplete'}, + {country: 'Lithuania', iso3Code: 'LTU', iso2Code: 'LT', datasetCode: 'lt-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Luxembourg', iso3Code: 'LUX', iso2Code: 'LU', datasetCode: 'lu-address', searchType: 'singleline, typedown, validate'}, + {country: 'Luxembourg', iso3Code: 'LUX', iso2Code: 'LU', datasetCode: 'lu-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Macau', iso3Code: 'MAC', iso2Code: 'MO', datasetCode: 'lv-address-ed', searchType: 'singleline, validate'}, - {country: 'Macau', iso3Code: 'MAC', iso2Code: 'MO', datasetCode: 'lv-address-eh', searchType: 'autocomplete'}, + {country: 'Macau', iso3Code: 'MAC', iso2Code: 'MO', datasetCode: 'lv-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Madagascar', iso3Code: 'MDG', iso2Code: 'MG', datasetCode: 'mo-address-ed', searchType: 'singleline, validate'}, - {country: 'Madagascar', iso3Code: 'MDG', iso2Code: 'MG', datasetCode: 'mo-address-eh', searchType: 'autocomplete'}, + {country: 'Madagascar', iso3Code: 'MDG', iso2Code: 'MG', datasetCode: 'mo-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Malawi', iso3Code: 'MWI', iso2Code: 'MW', datasetCode: 'mw-address-ed', searchType: 'singleline, validate'}, - {country: 'Malawi', iso3Code: 'MWI', iso2Code: 'MW', datasetCode: 'mw-address-eh', searchType: 'autocomplete'}, + {country: 'Malawi', iso3Code: 'MWI', iso2Code: 'MW', datasetCode: 'mw-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Malaysia', iso3Code: 'MYS', iso2Code: 'MY', datasetCode: 'my-address-ed', searchType: 'singleline, validate'}, - {country: 'Malaysia', iso3Code: 'MYS', iso2Code: 'MY', datasetCode: 'my-address-eh', searchType: 'autocomplete'}, + {country: 'Malaysia', iso3Code: 'MYS', iso2Code: 'MY', datasetCode: 'my-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Maldives', iso3Code: 'MDV', iso2Code: 'MV', datasetCode: 'mv-address-ed', searchType: 'singleline, validate'}, - {country: 'Maldives', iso3Code: 'MDV', iso2Code: 'MV', datasetCode: 'mv-address-eh', searchType: 'autocomplete'}, + {country: 'Maldives', iso3Code: 'MDV', iso2Code: 'MV', datasetCode: 'mv-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Mali', iso3Code: 'MLI', iso2Code: 'ML', datasetCode: 'ml-address-ed', searchType: 'singleline, validate'}, - {country: 'Mali', iso3Code: 'MLI', iso2Code: 'ML', datasetCode: 'ml-address-eh', searchType: 'autocomplete'}, + {country: 'Mali', iso3Code: 'MLI', iso2Code: 'ML', datasetCode: 'ml-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Malta', iso3Code: 'MLT', iso2Code: 'MT', datasetCode: 'mt-address-ed', searchType: 'singleline, validate'}, - {country: 'Malta', iso3Code: 'MLT', iso2Code: 'MT', datasetCode: 'mt-address-eh', searchType: 'autocomplete'}, - {country: 'Marshall Islands', iso3Code: 'MHL', iso2Code: 'MH', datasetCode: 'mh-address-eh', searchType: 'autocomplete'}, - {country: 'Martinique', iso3Code: 'MTQ', iso2Code: 'MQ', datasetCode: 'mq-address-eh', searchType: 'autocomplete'}, + {country: 'Malta', iso3Code: 'MLT', iso2Code: 'MT', datasetCode: 'mt-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Marshall Islands', iso3Code: 'MHL', iso2Code: 'MH', datasetCode: 'mh-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Martinique', iso3Code: 'MTQ', iso2Code: 'MQ', datasetCode: 'mq-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Mauritania', iso3Code: 'MRT', iso2Code: 'MR', datasetCode: 'mr-address-ed', searchType: 'singleline, validate'}, - {country: 'Mauritania', iso3Code: 'MRT', iso2Code: 'MR', datasetCode: 'mr-address-eh', searchType: 'autocomplete'}, + {country: 'Mauritania', iso3Code: 'MRT', iso2Code: 'MR', datasetCode: 'mr-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Mauritius', iso3Code: 'MUS', iso2Code: 'MU', datasetCode: 'mu-address-ed', searchType: 'singleline, validate'}, - {country: 'Mauritius', iso3Code: 'MUS', iso2Code: 'MU', datasetCode: 'mu-address-eh', searchType: 'autocomplete'}, - {country: 'Mayotte', iso3Code: 'MYT', iso2Code: 'YT', datasetCode: 'yt-address-eh', searchType: 'autocomplete'}, + {country: 'Mauritius', iso3Code: 'MUS', iso2Code: 'MU', datasetCode: 'mu-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Mayotte', iso3Code: 'MYT', iso2Code: 'YT', datasetCode: 'yt-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Mexico', iso3Code: 'MEX', iso2Code: 'MX', datasetCode: 'mx-address-ed', searchType: 'singleline, validate'}, - {country: 'Mexico', iso3Code: 'MEX', iso2Code: 'MX', datasetCode: 'mx-address-eh', searchType: 'autocomplete'}, - {country: 'Micronesia, Federated States of', iso3Code: 'FSM', iso2Code: 'FM', datasetCode: 'fm-address-eh', searchType: 'autocomplete'}, + {country: 'Mexico', iso3Code: 'MEX', iso2Code: 'MX', datasetCode: 'mx-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Micronesia, Federated States of', iso3Code: 'FSM', iso2Code: 'FM', datasetCode: 'fm-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Moldova', iso3Code: 'MDA', iso2Code: 'MD', datasetCode: 'md-address-ed', searchType: 'singleline, validate'}, - {country: 'Moldova', iso3Code: 'MDA', iso2Code: 'MD', datasetCode: 'md-address-eh', searchType: 'autocomplete'}, + {country: 'Moldova', iso3Code: 'MDA', iso2Code: 'MD', datasetCode: 'md-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Monaco', iso3Code: 'MCO', iso2Code: 'MC', datasetCode: 'mc-address-ed', searchType: 'singleline, validate'}, - {country: 'Monaco', iso3Code: 'MCO', iso2Code: 'MC', datasetCode: 'mc-address-eh', searchType: 'autocomplete'}, + {country: 'Monaco', iso3Code: 'MCO', iso2Code: 'MC', datasetCode: 'mc-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Mongolia', iso3Code: 'MNG', iso2Code: 'MN', datasetCode: 'mn-address-ed', searchType: 'singleline, validate'}, - {country: 'Mongolia', iso3Code: 'MNG', iso2Code: 'MN', datasetCode: 'mn-address-eh', searchType: 'autocomplete'}, + {country: 'Mongolia', iso3Code: 'MNG', iso2Code: 'MN', datasetCode: 'mn-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Montenegro', iso3Code: 'MNE', iso2Code: 'ME', datasetCode: 'me-address-ed', searchType: 'singleline, validate'}, - {country: 'Montenegro', iso3Code: 'MNE', iso2Code: 'ME', datasetCode: 'me-address-eh', searchType: 'autocomplete'}, - {country: 'Montserrat', iso3Code: 'MSR', iso2Code: 'MS', datasetCode: 'ms-address-eh', searchType: 'autocomplete'}, + {country: 'Montenegro', iso3Code: 'MNE', iso2Code: 'ME', datasetCode: 'me-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Montserrat', iso3Code: 'MSR', iso2Code: 'MS', datasetCode: 'ms-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Morocco', iso3Code: 'MAR', iso2Code: 'MA', datasetCode: 'ma-address-ed', searchType: 'singleline, validate'}, - {country: 'Morocco', iso3Code: 'MAR', iso2Code: 'MA', datasetCode: 'ma-address-eh', searchType: 'autocomplete'}, + {country: 'Morocco', iso3Code: 'MAR', iso2Code: 'MA', datasetCode: 'ma-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Mozambique', iso3Code: 'MOZ', iso2Code: 'MZ', datasetCode: 'mz-address-ed', searchType: 'singleline, validate'}, - {country: 'Mozambique', iso3Code: 'MOZ', iso2Code: 'MZ', datasetCode: 'mz-address-eh', searchType: 'autocomplete'}, + {country: 'Mozambique', iso3Code: 'MOZ', iso2Code: 'MZ', datasetCode: 'mz-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Myanmar', iso3Code: 'MMR', iso2Code: 'MM', datasetCode: 'mm-address-ed', searchType: 'singleline, validate'}, - {country: 'Myanmar', iso3Code: 'MMR', iso2Code: 'MM', datasetCode: 'mm-address-eh', searchType: 'autocomplete'}, + {country: 'Myanmar', iso3Code: 'MMR', iso2Code: 'MM', datasetCode: 'mm-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Namibia', iso3Code: 'NAM', iso2Code: 'NA', datasetCode: 'na-address-ed', searchType: 'singleline, validate'}, - {country: 'Namibia', iso3Code: 'NAM', iso2Code: 'NA', datasetCode: 'na-address-eh', searchType: 'autocomplete'}, + {country: 'Namibia', iso3Code: 'NAM', iso2Code: 'NA', datasetCode: 'na-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Nauru', iso3Code: 'NRU', iso2Code: 'NR', datasetCode: 'nr-address-ed', searchType: 'singleline, validate'}, - {country: 'Nauru', iso3Code: 'NRU', iso2Code: 'NR', datasetCode: 'nr-address-eh', searchType: 'autocomplete'}, + {country: 'Nauru', iso3Code: 'NRU', iso2Code: 'NR', datasetCode: 'nr-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Nepal', iso3Code: 'NPL', iso2Code: 'NP', datasetCode: 'np-address-ed', searchType: 'singleline, validate'}, - {country: 'Nepal', iso3Code: 'NPL', iso2Code: 'NP', datasetCode: 'np-address-eh', searchType: 'autocomplete'}, - {country: 'Netherlands', iso3Code: 'NLD', iso2Code: 'NL', datasetCode: 'nl-address-ed', searchType: 'singleline, validate'}, - {country: 'Netherlands', iso3Code: 'NLD', iso2Code: 'NL', datasetCode: 'nl-address-eh', searchType: 'autocomplete'}, - {country: 'New Caledonia', iso3Code: 'NCL', iso2Code: 'NC', datasetCode: 'nc-address-eh', searchType: 'autocomplete'}, - {country: 'New Zealand DataFusion', iso3Code: 'NZL', iso2Code: 'NZ', datasetCode: 'nz-additional-datafusion', searchType: 'autocomplete, singleline, typedown, validate'}, - {country: 'New Zealand Postal Address', iso3Code: 'NZL', iso2Code: 'NZ', datasetCode: 'nz-address', searchType: 'autocomplete, singleline, typedown, validate'}, + {country: 'Nepal', iso3Code: 'NPL', iso2Code: 'NP', datasetCode: 'np-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Netherlands', iso3Code: 'NLD', iso2Code: 'NL', datasetCode: 'nl-address', searchType: 'singleline, typedown, validate'}, + {country: 'Netherlands', iso3Code: 'NLD', iso2Code: 'NL', datasetCode: 'nl-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'New Caledonia', iso3Code: 'NCL', iso2Code: 'NC', datasetCode: 'nc-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'New Zealand DataFusion', iso3Code: 'NZL', iso2Code: 'NZ', datasetCode: 'nz-additional-datafusion', searchType: 'autocomplete, singleline, typedown, validate, lookupv2'}, + {country: 'New Zealand Postal Address', iso3Code: 'NZL', iso2Code: 'NZ', datasetCode: 'nz-address', searchType: 'autocomplete, singleline, typedown, validate, lookupv2'}, {country: 'Nicaragua', iso3Code: 'NIC', iso2Code: 'NI', datasetCode: 'ni-address-ed', searchType: 'singleline, validate'}, - {country: 'Nicaragua', iso3Code: 'NIC', iso2Code: 'NI', datasetCode: 'ni-address-eh', searchType: 'autocomplete'}, + {country: 'Nicaragua', iso3Code: 'NIC', iso2Code: 'NI', datasetCode: 'ni-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Niger', iso3Code: 'NER', iso2Code: 'NE', datasetCode: 'ne-address-ed', searchType: 'singleline, validate'}, - {country: 'Niger', iso3Code: 'NER', iso2Code: 'NE', datasetCode: 'ne-address-eh', searchType: 'autocomplete'}, + {country: 'Niger', iso3Code: 'NER', iso2Code: 'NE', datasetCode: 'ne-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Nigeria', iso3Code: 'NGA', iso2Code: 'NG', datasetCode: 'ng-address-ed', searchType: 'singleline, validate'}, - {country: 'Nigeria', iso3Code: 'NGA', iso2Code: 'NG', datasetCode: 'ng-address-eh', searchType: 'autocomplete'}, + {country: 'Nigeria', iso3Code: 'NGA', iso2Code: 'NG', datasetCode: 'ng-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Niue', iso3Code: 'NIU', iso2Code: 'NU', datasetCode: 'nu-address-ed', searchType: 'singleline, validate'}, + {country: 'Niue', iso3Code: 'NIU', iso2Code: 'NU', datasetCode: 'nu-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Norfolk Island', iso3Code: 'NFK', iso2Code: 'NF', datasetCode: 'nf-address-ed', searchType: 'singleline, validate'}, - {country: 'Norfolk Island', iso3Code: 'NFK', iso2Code: 'NF', datasetCode: 'nf-address-eh', searchType: 'autocomplete'}, + {country: 'Norfolk Island', iso3Code: 'NFK', iso2Code: 'NF', datasetCode: 'nf-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'North Macedonia', iso3Code: 'MKD', iso2Code: 'MK', datasetCode: 'mk-address-ed', searchType: 'singleline, validate'}, - {country: 'North Macedonia', iso3Code: 'MKD', iso2Code: 'MK', datasetCode: 'mk-address-eh', searchType: 'autocomplete'}, - {country: 'Northern Mariana Islands', iso3Code: 'MNP', iso2Code: 'MP', datasetCode: 'mp-address-eh', searchType: 'autocomplete'}, + {country: 'North Macedonia', iso3Code: 'MKD', iso2Code: 'MK', datasetCode: 'mk-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Northern Mariana Islands', iso3Code: 'MNP', iso2Code: 'MP', datasetCode: 'mp-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Norway', iso3Code: 'NOR', iso2Code: 'NO', datasetCode: 'no-address', searchType: 'singleline, typedown'}, {country: 'Norway', iso3Code: 'NOR', iso2Code: 'NO', datasetCode: 'no-address-ed', searchType: 'validate'}, - {country: 'Norway', iso3Code: 'NOR', iso2Code: 'NO', datasetCode: 'no-address-eh', searchType: 'autocomplete'}, + {country: 'Norway', iso3Code: 'NOR', iso2Code: 'NO', datasetCode: 'no-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Oman', iso3Code: 'OMN', iso2Code: 'OM', datasetCode: 'om-address-ed', searchType: 'singleline, validate'}, - {country: 'Oman', iso3Code: 'OMN', iso2Code: 'OM', datasetCode: 'om-address-eh', searchType: 'autocomplete'}, + {country: 'Oman', iso3Code: 'OMN', iso2Code: 'OM', datasetCode: 'om-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Pakistan', iso3Code: 'PAK', iso2Code: 'PK', datasetCode: 'pk-address-ed', searchType: 'singleline, validate'}, - {country: 'Pakistan', iso3Code: 'PAK', iso2Code: 'PK', datasetCode: 'pk-address-eh', searchType: 'autocomplete'}, - {country: 'Palau', iso3Code: 'PLW', iso2Code: 'PW', datasetCode: 'pw-address-eh', searchType: 'autocomplete'}, - {country: 'Palestine', iso3Code: 'PSE', iso2Code: 'PS', datasetCode: 'ps-address-eh', searchType: 'autocomplete'}, + {country: 'Pakistan', iso3Code: 'PAK', iso2Code: 'PK', datasetCode: 'pk-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Palau', iso3Code: 'PLW', iso2Code: 'PW', datasetCode: 'pw-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Palestine', iso3Code: 'PSE', iso2Code: 'PS', datasetCode: 'ps-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Panama', iso3Code: 'PAN', iso2Code: 'PA', datasetCode: 'pa-address-ed', searchType: 'singleline, validate'}, - {country: 'Panama', iso3Code: 'PAN', iso2Code: 'PA', datasetCode: 'pa-address-eh', searchType: 'autocomplete'}, + {country: 'Panama', iso3Code: 'PAN', iso2Code: 'PA', datasetCode: 'pa-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Papua New Guinea', iso3Code: 'PNG', iso2Code: 'PG', datasetCode: 'pg-address-ed', searchType: 'singleline, validate'}, - {country: 'Papua New Guinea', iso3Code: 'PNG', iso2Code: 'PG', datasetCode: 'pg-address-eh', searchType: 'autocomplete'}, + {country: 'Papua New Guinea', iso3Code: 'PNG', iso2Code: 'PG', datasetCode: 'pg-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Paraguay', iso3Code: 'PRY', iso2Code: 'PY', datasetCode: 'py-address-ed', searchType: 'singleline, validate'}, - {country: 'Paraguay', iso3Code: 'PRY', iso2Code: 'PY', datasetCode: 'py-address-eh', searchType: 'autocomplete'}, + {country: 'Paraguay', iso3Code: 'PRY', iso2Code: 'PY', datasetCode: 'py-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Peru', iso3Code: 'PER', iso2Code: 'PE', datasetCode: 'pe-address-ed', searchType: 'singleline, validate'}, - {country: 'Peru', iso3Code: 'PER', iso2Code: 'PE', datasetCode: 'pe-address-eh', searchType: 'autocomplete'}, + {country: 'Peru', iso3Code: 'PER', iso2Code: 'PE', datasetCode: 'pe-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Philippines', iso3Code: 'PHL', iso2Code: 'PH', datasetCode: 'ph-address-ed', searchType: 'singleline, validate'}, - {country: 'Philippines', iso3Code: 'PHL', iso2Code: 'PH', datasetCode: 'ph-address-eh', searchType: 'autocomplete'}, - {country: 'Pitcairn Islands', iso3Code: 'PCN', iso2Code: 'PN', datasetCode: 'pn-address-eh', searchType: 'autocomplete'}, + {country: 'Philippines', iso3Code: 'PHL', iso2Code: 'PH', datasetCode: 'ph-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Pitcairn Islands', iso3Code: 'PCN', iso2Code: 'PN', datasetCode: 'pn-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Poland', iso3Code: 'POL', iso2Code: 'PL', datasetCode: 'pl-address-ed', searchType: 'singleline, validate'}, - {country: 'Poland', iso3Code: 'POL', iso2Code: 'PL', datasetCode: 'pl-address-eh', searchType: 'autocomplete'}, + {country: 'Poland', iso3Code: 'POL', iso2Code: 'PL', datasetCode: 'pl-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Portugal', iso3Code: 'PRT', iso2Code: 'PT', datasetCode: 'pt-address-ed', searchType: 'singleline, validate'}, - {country: 'Portugal', iso3Code: 'PRT', iso2Code: 'PT', datasetCode: 'pt-address-eh', searchType: 'autocomplete'}, + {country: 'Portugal', iso3Code: 'PRT', iso2Code: 'PT', datasetCode: 'pt-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Qatar', iso3Code: 'QAT', iso2Code: 'QA', datasetCode: 'qa-address-ed', searchType: 'singleline, validate'}, - {country: 'Qatar', iso3Code: 'QAT', iso2Code: 'QA', datasetCode: 'qa-address-eh', searchType: 'autocomplete'}, + {country: 'Qatar', iso3Code: 'QAT', iso2Code: 'QA', datasetCode: 'qa-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Romania', iso3Code: 'ROU', iso2Code: 'RO', datasetCode: 'ro-address-ed', searchType: 'singleline, validate'}, - {country: 'Romania', iso3Code: 'ROU', iso2Code: 'RO', datasetCode: 'ro-address-eh', searchType: 'autocomplete'}, + {country: 'Romania', iso3Code: 'ROU', iso2Code: 'RO', datasetCode: 'ro-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Russian Federation', iso3Code: 'RUS', iso2Code: 'RU', datasetCode: 'ru-address-ed', searchType: 'singleline, validate'}, - {country: 'Russian Federation', iso3Code: 'RUS', iso2Code: 'RU', datasetCode: 'ru-address-eh', searchType: 'autocomplete'}, + {country: 'Russian Federation', iso3Code: 'RUS', iso2Code: 'RU', datasetCode: 'ru-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Rwanda', iso3Code: 'RWA', iso2Code: 'RW', datasetCode: 'rw-address-ed', searchType: 'singleline, validate'}, - {country: 'Rwanda', iso3Code: 'RWA', iso2Code: 'RW', datasetCode: 'rw-address-eh', searchType: 'autocomplete'}, - {country: 'Réunion', iso3Code: 'REU', iso2Code: 'RE', datasetCode: 're-address-eh', searchType: 'autocomplete'}, - {country: 'Saint Barthélemy', iso3Code: 'BLM', iso2Code: 'BL', datasetCode: 'bl-address-eh', searchType: 'autocomplete'}, - {country: 'Saint Helena', iso3Code: 'SHN', iso2Code: 'SH', datasetCode: 'sh-address-eh', searchType: 'autocomplete'}, + {country: 'Rwanda', iso3Code: 'RWA', iso2Code: 'RW', datasetCode: 'rw-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Réunion', iso3Code: 'REU', iso2Code: 'RE', datasetCode: 're-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Saint Barthélemy', iso3Code: 'BLM', iso2Code: 'BL', datasetCode: 'bl-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Saint Helena', iso3Code: 'SHN', iso2Code: 'SH', datasetCode: 'sh-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Saint Kitts and Nevis', iso3Code: 'KNA', iso2Code: 'KN', datasetCode: 'kn-address-ed', searchType: 'singleline, validate'}, - {country: 'Saint Kitts and Nevis', iso3Code: 'KNA', iso2Code: 'KN', datasetCode: 'kn-address-eh', searchType: 'autocomplete'}, - {country: 'Saint Lucia', iso3Code: 'LCA', iso2Code: 'LC', datasetCode: 'lc-address-eh', searchType: 'autocomplete'}, - {country: 'Saint Pierre and Miquelon', iso3Code: 'SPM', iso2Code: 'PM', datasetCode: 'pm-address-eh', searchType: 'autocomplete'}, + {country: 'Saint Kitts and Nevis', iso3Code: 'KNA', iso2Code: 'KN', datasetCode: 'kn-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Saint Lucia', iso3Code: 'LCA', iso2Code: 'LC', datasetCode: 'lc-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Saint Martin', iso3Code: 'MAF', iso2Code: 'MF', datasetCode: 'mf-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Saint Pierre and Miquelon', iso3Code: 'SPM', iso2Code: 'PM', datasetCode: 'pm-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Saint Vincent and the Grenadines', iso3Code: 'VCT', iso2Code: 'VC', datasetCode: 'vc-address-ed', searchType: 'singleline, validate'}, - {country: 'Saint Vincent and the Grenadines', iso3Code: 'VCT', iso2Code: 'VC', datasetCode: 'vc-address-eh', searchType: 'autocomplete'}, + {country: 'Saint Vincent and the Grenadines', iso3Code: 'VCT', iso2Code: 'VC', datasetCode: 'vc-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Samoa', iso3Code: 'WSM', iso2Code: 'WS', datasetCode: 'ws-address-ed', searchType: 'singleline, validate'}, - {country: 'Samoa', iso3Code: 'WSM', iso2Code: 'WS', datasetCode: 'ws-address-eh', searchType: 'autocomplete'}, + {country: 'Samoa', iso3Code: 'WSM', iso2Code: 'WS', datasetCode: 'ws-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'San Marino', iso3Code: 'SMR', iso2Code: 'SM', datasetCode: 'sm-address-ed', searchType: 'singleline, validate'}, - {country: 'San Marino', iso3Code: 'SMR', iso2Code: 'SM', datasetCode: 'sm-address-eh', searchType: 'autocomplete'}, + {country: 'San Marino', iso3Code: 'SMR', iso2Code: 'SM', datasetCode: 'sm-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Sao Tome and Principe', iso3Code: 'STP', iso2Code: 'ST', datasetCode: 'st-address-ed', searchType: 'singleline, validate'}, - {country: 'Sao Tome and Principe', iso3Code: 'STP', iso2Code: 'ST', datasetCode: 'st-address-eh', searchType: 'autocomplete'}, + {country: 'Sao Tome and Principe', iso3Code: 'STP', iso2Code: 'ST', datasetCode: 'st-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Saudi Arabia', iso3Code: 'SAU', iso2Code: 'SA', datasetCode: 'sa-address-ed', searchType: 'singleline, validate'}, - {country: 'Saudi Arabia', iso3Code: 'SAU', iso2Code: 'SA', datasetCode: 'sa-address-eh', searchType: 'autocomplete'}, + {country: 'Saudi Arabia', iso3Code: 'SAU', iso2Code: 'SA', datasetCode: 'sa-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Senegal', iso3Code: 'SEN', iso2Code: 'SN', datasetCode: 'sn-address-ed', searchType: 'singleline, validate'}, - {country: 'Senegal', iso3Code: 'SEN', iso2Code: 'SN', datasetCode: 'sn-address-eh', searchType: 'autocomplete'}, + {country: 'Senegal', iso3Code: 'SEN', iso2Code: 'SN', datasetCode: 'sn-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Serbia', iso3Code: 'SRB', iso2Code: 'RS', datasetCode: 'rs-address-ed', searchType: 'singleline, validate'}, - {country: 'Serbia', iso3Code: 'SRB', iso2Code: 'RS', datasetCode: 'rs-address-eh', searchType: 'autocomplete'}, + {country: 'Serbia', iso3Code: 'SRB', iso2Code: 'RS', datasetCode: 'rs-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Seychelles', iso3Code: 'SYC', iso2Code: 'SC', datasetCode: 'sc-address-ed', searchType: 'singleline, validate'}, - {country: 'Seychelles', iso3Code: 'SYC', iso2Code: 'SC', datasetCode: 'sc-address-eh', searchType: 'autocomplete'}, + {country: 'Seychelles', iso3Code: 'SYC', iso2Code: 'SC', datasetCode: 'sc-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Sierra Leone', iso3Code: 'SLE', iso2Code: 'SL', datasetCode: 'sl-address-ed', searchType: 'singleline, validate'}, - {country: 'Sierra Leone', iso3Code: 'SLE', iso2Code: 'SL', datasetCode: 'sl-address-eh', searchType: 'autocomplete'}, - {country: 'Singapore', iso3Code: 'SGP', iso2Code: 'SG', datasetCode: 'sg-address', searchType: 'autocomplete, singleline, typedown, validate'}, + {country: 'Sierra Leone', iso3Code: 'SLE', iso2Code: 'SL', datasetCode: 'sl-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Singapore', iso3Code: 'SGP', iso2Code: 'SG', datasetCode: 'sg-address', searchType: 'autocomplete, singleline, typedown, validate, lookupv2'}, {country: 'Sint Maarten', iso3Code: 'SXM', iso2Code: 'SX', datasetCode: 'sx-address-ed', searchType: 'singleline, validate'}, - {country: 'Sint Maarten', iso3Code: 'SXM', iso2Code: 'SX', datasetCode: 'sx-address-eh', searchType: 'autocomplete'}, + {country: 'Sint Maarten', iso3Code: 'SXM', iso2Code: 'SX', datasetCode: 'sx-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Slovakia', iso3Code: 'SVK', iso2Code: 'SK', datasetCode: 'sk-address-ed', searchType: 'singleline, validate'}, - {country: 'Slovakia', iso3Code: 'SVK', iso2Code: 'SK', datasetCode: 'sk-address-eh', searchType: 'autocomplete'}, + {country: 'Slovakia', iso3Code: 'SVK', iso2Code: 'SK', datasetCode: 'sk-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Slovenia', iso3Code: 'SVN', iso2Code: 'SI', datasetCode: 'si-address-ed', searchType: 'singleline, validate'}, - {country: 'Slovenia', iso3Code: 'SVN', iso2Code: 'SI', datasetCode: 'si-address-eh', searchType: 'autocomplete'}, + {country: 'Slovenia', iso3Code: 'SVN', iso2Code: 'SI', datasetCode: 'si-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Solomon Islands', iso3Code: 'SLB', iso2Code: 'SB', datasetCode: 'sb-address-ed', searchType: 'singleline, validate'}, - {country: 'Solomon Islands', iso3Code: 'SLB', iso2Code: 'SB', datasetCode: 'sb-address-eh', searchType: 'autocomplete'}, + {country: 'Solomon Islands', iso3Code: 'SLB', iso2Code: 'SB', datasetCode: 'sb-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Somalia', iso3Code: 'SOM', iso2Code: 'SO', datasetCode: 'so-address-ed', searchType: 'singleline, validate'}, - {country: 'Somalia', iso3Code: 'SOM', iso2Code: 'SO', datasetCode: 'so-address-eh', searchType: 'autocomplete'}, + {country: 'Somalia', iso3Code: 'SOM', iso2Code: 'SO', datasetCode: 'so-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'South Africa', iso3Code: 'ZAF', iso2Code: 'ZA', datasetCode: 'za-address-ed', searchType: 'singleline, validate'}, - {country: 'South Africa', iso3Code: 'ZAF', iso2Code: 'ZA', datasetCode: 'za-address-eh', searchType: 'autocomplete'}, - {country: 'South Georgia and the South Sandwich Islands', iso3Code: 'SGS', iso2Code: 'GS', datasetCode: 'gs-address-eh', searchType: 'autocomplete'}, + {country: 'South Africa', iso3Code: 'ZAF', iso2Code: 'ZA', datasetCode: 'za-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'South Georgia and the South Sandwich Islands', iso3Code: 'SGS', iso2Code: 'GS', datasetCode: 'gs-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'South Sudan', iso3Code: 'SSD', iso2Code: 'SS', datasetCode: 'ss-address-ed', searchType: 'singleline, validate'}, - {country: 'South Sudan', iso3Code: 'SSD', iso2Code: 'SS', datasetCode: 'ss-address-eh', searchType: 'autocomplete'}, + {country: 'South Sudan', iso3Code: 'SSD', iso2Code: 'SS', datasetCode: 'ss-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Spain', iso3Code: 'ESP', iso2Code: 'ES', datasetCode: 'es-address', searchType: 'singleline, typedown'}, {country: 'Spain', iso3Code: 'ESP', iso2Code: 'ES', datasetCode: 'es-address-ed', searchType: 'validate'}, - {country: 'Spain', iso3Code: 'ESP', iso2Code: 'ES', datasetCode: 'es-address-eh', searchType: 'autocomplete'}, + {country: 'Spain', iso3Code: 'ESP', iso2Code: 'ES', datasetCode: 'es-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Sri Lanka', iso3Code: 'LKA', iso2Code: 'LK', datasetCode: 'lk-address-ed', searchType: 'singleline, validate'}, {country: 'Sudan', iso3Code: 'SDN', iso2Code: 'SD', datasetCode: 'sd-address-ed', searchType: 'singleline, validate'}, - {country: 'Sudan', iso3Code: 'SDN', iso2Code: 'SD', datasetCode: 'sd-address-eh', searchType: 'autocomplete'}, + {country: 'Sudan', iso3Code: 'SDN', iso2Code: 'SD', datasetCode: 'sd-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Suriname', iso3Code: 'SUR', iso2Code: 'SR', datasetCode: 'sr-address-ed', searchType: 'singleline, validate'}, - {country: 'Suriname', iso3Code: 'SUR', iso2Code: 'SR', datasetCode: 'sr-address-eh', searchType: 'autocomplete'}, - {country: 'Svalbard and Jan Mayen Islands', iso3Code: 'SJM', iso2Code: 'SJ', datasetCode: 'sj-address-eh', searchType: 'autocomplete'}, + {country: 'Suriname', iso3Code: 'SUR', iso2Code: 'SR', datasetCode: 'sr-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Svalbard and Jan Mayen Islands', iso3Code: 'SJM', iso2Code: 'SJ', datasetCode: 'sj-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Swaziland (Eswatini)', iso3Code: 'SWZ', iso2Code: 'SZ', datasetCode: 'sz-address-ed', searchType: 'singleline, validate'}, - {country: 'Swaziland (Eswatini)', iso3Code: 'SWZ', iso2Code: 'SZ', datasetCode: 'sz-address-eh', searchType: 'autocomplete'}, + {country: 'Swaziland (Eswatini)', iso3Code: 'SWZ', iso2Code: 'SZ', datasetCode: 'sz-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Sweden', iso3Code: 'SWE', iso2Code: 'SE', datasetCode: 'se-address', searchType: 'singleline, typedown'}, {country: 'Sweden', iso3Code: 'SWE', iso2Code: 'SE', datasetCode: 'se-address-ed', searchType: 'validate'}, - {country: 'Sweden', iso3Code: 'SWE', iso2Code: 'SE', datasetCode: 'se-address-eh', searchType: 'autocomplete'}, + {country: 'Sweden', iso3Code: 'SWE', iso2Code: 'SE', datasetCode: 'se-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Switzerland', iso3Code: 'CHE', iso2Code: 'CH', datasetCode: 'ch-address', searchType: 'singleline, typedown'}, {country: 'Switzerland', iso3Code: 'CHE', iso2Code: 'CH', datasetCode: 'ch-address-ed', searchType: 'validate'}, - {country: 'Switzerland', iso3Code: 'CHE', iso2Code: 'CH', datasetCode: 'ch-address-eh', searchType: 'autocomplete'}, + {country: 'Switzerland', iso3Code: 'CHE', iso2Code: 'CH', datasetCode: 'ch-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Syria', iso3Code: 'SYR', iso2Code: 'SY', datasetCode: 'sy-address-ed', searchType: 'singleline, validate'}, - {country: 'Syria', iso3Code: 'SYR', iso2Code: 'SY', datasetCode: 'sy-address-eh', searchType: 'autocomplete'}, + {country: 'Syria', iso3Code: 'SYR', iso2Code: 'SY', datasetCode: 'sy-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Taiwan', iso3Code: 'TWN', iso2Code: 'TW', datasetCode: 'tw-address-ed', searchType: 'singleline, validate'}, - {country: 'Taiwan', iso3Code: 'TWN', iso2Code: 'TW', datasetCode: 'tw-address-eh', searchType: 'autocomplete'}, + {country: 'Taiwan', iso3Code: 'TWN', iso2Code: 'TW', datasetCode: 'tw-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Tajikistan', iso3Code: 'TJK', iso2Code: 'TJ', datasetCode: 'tj-address-ed', searchType: 'singleline, validate'}, - {country: 'Tajikistan', iso3Code: 'TJK', iso2Code: 'TJ', datasetCode: 'tj-address-eh', searchType: 'autocomplete'}, + {country: 'Tajikistan', iso3Code: 'TJK', iso2Code: 'TJ', datasetCode: 'tj-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Tanzania', iso3Code: 'TZA', iso2Code: 'TZ', datasetCode: 'tz-address-ed', searchType: 'singleline, validate'}, - {country: 'Tanzania', iso3Code: 'TZA', iso2Code: 'TZ', datasetCode: 'tz-address-eh', searchType: 'autocomplete'}, + {country: 'Tanzania', iso3Code: 'TZA', iso2Code: 'TZ', datasetCode: 'tz-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Thailand', iso3Code: 'THA', iso2Code: 'TH', datasetCode: 'th-address-ed', searchType: 'singleline, validate'}, - {country: 'Thailand', iso3Code: 'THA', iso2Code: 'TH', datasetCode: 'th-address-eh', searchType: 'autocomplete'}, + {country: 'Thailand', iso3Code: 'THA', iso2Code: 'TH', datasetCode: 'th-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Timor-Leste', iso3Code: 'TLS', iso2Code: 'TL', datasetCode: 'tl-address-ed', searchType: 'singleline, validate'}, - {country: 'Timor-Leste', iso3Code: 'TLS', iso2Code: 'TL', datasetCode: 'tl-address-eh', searchType: 'autocomplete'}, + {country: 'Timor-Leste', iso3Code: 'TLS', iso2Code: 'TL', datasetCode: 'tl-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Togo', iso3Code: 'TGO', iso2Code: 'TG', datasetCode: 'tg-address-ed', searchType: 'singleline, validate'}, - {country: 'Togo', iso3Code: 'TGO', iso2Code: 'TG', datasetCode: 'tg-address-eh', searchType: 'autocomplete'}, + {country: 'Togo', iso3Code: 'TGO', iso2Code: 'TG', datasetCode: 'tg-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Tokelau', iso3Code: 'TKL', iso2Code: 'TK', datasetCode: 'tk-address-ed', searchType: 'singleline, validate'}, - {country: 'Tokelau', iso3Code: 'TKL', iso2Code: 'TK', datasetCode: 'tk-address-eh', searchType: 'autocomplete'}, + {country: 'Tokelau', iso3Code: 'TKL', iso2Code: 'TK', datasetCode: 'tk-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Tonga', iso3Code: 'TON', iso2Code: 'TO', datasetCode: 'to-address-ed', searchType: 'singleline, validate'}, - {country: 'Tonga', iso3Code: 'TON', iso2Code: 'TO', datasetCode: 'to-address-eh', searchType: 'autocomplete'}, + {country: 'Tonga', iso3Code: 'TON', iso2Code: 'TO', datasetCode: 'to-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Trinidad and Tobago', iso3Code: 'TTO', iso2Code: 'TT', datasetCode: 'tt-address-ed', searchType: 'singleline, validate'}, - {country: 'Trinidad and Tobago', iso3Code: 'TTO', iso2Code: 'TT', datasetCode: 'tt-address-eh', searchType: 'autocomplete'}, + {country: 'Trinidad and Tobago', iso3Code: 'TTO', iso2Code: 'TT', datasetCode: 'tt-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Tunisia', iso3Code: 'TUN', iso2Code: 'TN', datasetCode: 'tn-address-ed', searchType: 'singleline, validate'}, - {country: 'Tunisia', iso3Code: 'TUN', iso2Code: 'TN', datasetCode: 'tn-address-eh', searchType: 'autocomplete'}, + {country: 'Tunisia', iso3Code: 'TUN', iso2Code: 'TN', datasetCode: 'tn-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Turkey', iso3Code: 'TUR', iso2Code: 'TR', datasetCode: 'tr-address-ed', searchType: 'singleline, validate'}, - {country: 'Turkey', iso3Code: 'TUR', iso2Code: 'TR', datasetCode: 'tr-address-eh', searchType: 'autocomplete'}, - {country: 'Turkish Republic of Northern Cyprus', iso3Code: 'NCY', iso2Code: 'CY', datasetCode: 'ny-address-eh', searchType: 'autocomplete'}, + {country: 'Turkey', iso3Code: 'TUR', iso2Code: 'TR', datasetCode: 'tr-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Turkish Republic of Northern Cyprus', iso3Code: 'NCY', iso2Code: 'CY', datasetCode: 'ny-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Turkmenistan', iso3Code: 'TKM', iso2Code: 'TM', datasetCode: 'tm-address-ed', searchType: 'singleline, validate'}, - {country: 'Turkmenistan', iso3Code: 'TKM', iso2Code: 'TM', datasetCode: 'tm-address-eh', searchType: 'autocomplete'}, - {country: 'Turks and Caicos Islands', iso3Code: 'TCA', iso2Code: 'TC', datasetCode: 'tc-address-eh', searchType: 'autocomplete'}, + {country: 'Turkmenistan', iso3Code: 'TKM', iso2Code: 'TM', datasetCode: 'tm-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Turks and Caicos Islands', iso3Code: 'TCA', iso2Code: 'TC', datasetCode: 'tc-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Tuvalu', iso3Code: 'TUV', iso2Code: 'TV', datasetCode: 'tv-address-ed', searchType: 'singleline, validate'}, - {country: 'Tuvalu', iso3Code: 'TUV', iso2Code: 'TV', datasetCode: 'tv-address-eh', searchType: 'autocomplete'}, + {country: 'Tuvalu', iso3Code: 'TUV', iso2Code: 'TV', datasetCode: 'tv-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Uganda', iso3Code: 'UGA', iso2Code: 'UG', datasetCode: 'ug-address-ed', searchType: 'singleline, validate'}, - {country: 'Uganda', iso3Code: 'UGA', iso2Code: 'UG', datasetCode: 'ug-address-eh', searchType: 'autocomplete'}, + {country: 'Uganda', iso3Code: 'UGA', iso2Code: 'UG', datasetCode: 'ug-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Ukraine', iso3Code: 'UKR', iso2Code: 'UA', datasetCode: 'ua-address-ed', searchType: 'singleline, validate'}, - {country: 'Ukraine', iso3Code: 'UKR', iso2Code: 'UA', datasetCode: 'ua-address-eh', searchType: 'autocomplete'}, + {country: 'Ukraine', iso3Code: 'UKR', iso2Code: 'UA', datasetCode: 'ua-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'United Arab Emirates', iso3Code: 'ARE', iso2Code: 'AE', datasetCode: 'ae-address-ed', searchType: 'singleline, validate'}, - {country: 'United Arab Emirates', iso3Code: 'ARE', iso2Code: 'AE', datasetCode: 'ae-address-eh', searchType: 'autocomplete'}, - {country: 'United Kingdom', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: ['gb-address'], searchType: 'autocomplete, lookupv2'}, - {country: 'United Kingdom', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: ['gb-additional-business', 'gb-additional-multipleresidence', 'gb-additional-notyetbuilt'], searchType: 'singleline'}, + {country: 'United Arab Emirates', iso3Code: 'ARE', iso2Code: 'AE', datasetCode: 'ae-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'United Kingdom', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-address', searchType: 'autocomplete, singleline, typedown, validate, lookupv2'}, + {country: 'United Kingdom', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-additional-multipleresidence', searchType: 'autocomplete, singleline, typedown, validate, lookupv2'}, + {country: 'United Kingdom', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-additional-notyetbuilt', searchType: 'autocomplete, singleline, typedown, validate, lookupv2'}, {country: 'United Kingdom AddressBase Premium', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-address-addressbase', searchType: 'singleline, typedown, validate, lookup'}, {country: 'United Kingdom AddressBase Premium with Islands', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-additional-addressbaseislands', searchType: 'singleline, typedown, validate, lookup'}, {country: 'United Kingdom Business Names', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-additional-business', searchType: 'singleline, typedown'}, - {country: 'United Kingdom Electricity', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-additional-electricity', searchType: 'singleline, typedown, validate, lookup'}, - {country: 'United Kingdom Gas', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-additional-gas', searchType: 'singleline, typedown, validate, lookup'}, + {country: 'United Kingdom Electricity', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-additional-electricity', searchType: 'autocomplete, singleline, typedown, lookupv2'}, + {country: 'United Kingdom Gas', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-additional-gas', searchType: 'autocomplete, singleline, typedown, lookupv2'}, {country: 'United Kingdom Street Level', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-address-streetlevel', searchType: 'singleline, typedown'}, {country: 'United Kingdom Extended Business', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-additional-businessextended', searchType: 'singleline, typedown, validate, lookup'}, {country: 'United Kingdom Cymraeg (Welsh Language) Postal Address', iso3Code: 'GBR', iso2Code: 'GB', datasetCode: 'gb-address-wales', searchType: 'singleline, typedown, validate'}, - {country: 'United States of America', iso3Code: 'USA', iso2Code: 'US', datasetCode: 'us-address', searchType: 'autocomplete, singleline, typedown, validate'}, + {country: 'United States of America', iso3Code: 'USA', iso2Code: 'US', datasetCode: 'us-address', searchType: 'autocomplete, singleline, typedown, validate, lookupv2'}, {country: 'Uruguay', iso3Code: 'URY', iso2Code: 'UY', datasetCode: 'uy-address-ed', searchType: 'singleline, validate'}, - {country: 'Uruguay', iso3Code: 'URY', iso2Code: 'UY', datasetCode: 'uy-address-eh', searchType: 'autocomplete'}, + {country: 'Uruguay', iso3Code: 'URY', iso2Code: 'UY', datasetCode: 'uy-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Uzbekistan', iso3Code: 'UZB', iso2Code: 'UZ', datasetCode: 'uz-address-ed', searchType: 'singleline, validate'}, - {country: 'Uzbekistan', iso3Code: 'UZB', iso2Code: 'UZ', datasetCode: 'uz-address-eh', searchType: 'autocomplete'}, + {country: 'Uzbekistan', iso3Code: 'UZB', iso2Code: 'UZ', datasetCode: 'uz-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Vanuatu', iso3Code: 'VUT', iso2Code: 'VU', datasetCode: 'vu-address-ed', searchType: 'singleline, validate'}, - {country: 'Vanuatu', iso3Code: 'VUT', iso2Code: 'VU', datasetCode: 'vu-address-eh', searchType: 'autocomplete'}, + {country: 'Vanuatu', iso3Code: 'VUT', iso2Code: 'VU', datasetCode: 'vu-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Vatican City (Holy See)', iso3Code: 'VAT', iso2Code: 'VA', datasetCode: 'va-address-ed', searchType: 'singleline, validate'}, - {country: 'Vatican City (Holy See)', iso3Code: 'VAT', iso2Code: 'VA', datasetCode: 'va-address-eh', searchType: 'autocomplete'}, + {country: 'Vatican City (Holy See)', iso3Code: 'VAT', iso2Code: 'VA', datasetCode: 'va-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Venezuela', iso3Code: 'VEN', iso2Code: 'VE', datasetCode: 've-address-ed', searchType: 'singleline, validate'}, - {country: 'Venezuela', iso3Code: 'VEN', iso2Code: 'VE', datasetCode: 've-address-eh', searchType: 'autocomplete'}, + {country: 'Venezuela', iso3Code: 'VEN', iso2Code: 'VE', datasetCode: 've-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Viet Nam', iso3Code: 'VNM', iso2Code: 'VN', datasetCode: 'vn-address-ed', searchType: 'singleline, validate'}, - {country: 'Viet Nam', iso3Code: 'VNM', iso2Code: 'VN', datasetCode: 'vn-address-eh', searchType: 'autocomplete'}, - {country: 'Virgin Islands, British', iso3Code: 'VGB', iso2Code: 'VG', datasetCode: 'vg-address-eh', searchType: 'autocomplete'}, - {country: 'Virgin Islands, U.S.', iso3Code: 'VIR', iso2Code: 'VI', datasetCode: 'vi-address-eh', searchType: 'autocomplete'}, - {country: 'Wallis and Futuna Islands', iso3Code: 'WLF', iso2Code: 'WF', datasetCode: 'wf-address-eh', searchType: 'autocomplete'}, + {country: 'Viet Nam', iso3Code: 'VNM', iso2Code: 'VN', datasetCode: 'vn-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Virgin Islands, British', iso3Code: 'VGB', iso2Code: 'VG', datasetCode: 'vg-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Virgin Islands, U.S.', iso3Code: 'VIR', iso2Code: 'VI', datasetCode: 'vi-address-eh', searchType: 'autocomplete, lookupv2'}, + {country: 'Wallis and Futuna Islands', iso3Code: 'WLF', iso2Code: 'WF', datasetCode: 'wf-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Western Sahara', iso3Code: 'ESH', iso2Code: 'EH', datasetCode: 'eh-address-ed', searchType: 'singleline, validate'}, - {country: 'Western Sahara', iso3Code: 'ESH', iso2Code: 'EH', datasetCode: 'eh-address-eh', searchType: 'autocomplete'}, + {country: 'Western Sahara', iso3Code: 'ESH', iso2Code: 'EH', datasetCode: 'eh-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Yemen', iso3Code: 'YEM', iso2Code: 'YE', datasetCode: 'ye-address-ed', searchType: 'singleline, validate'}, - {country: 'Yemen', iso3Code: 'YEM', iso2Code: 'YE', datasetCode: 'ye-address-eh', searchType: 'autocomplete'}, + {country: 'Yemen', iso3Code: 'YEM', iso2Code: 'YE', datasetCode: 'ye-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Zambia', iso3Code: 'ZMB', iso2Code: 'ZM', datasetCode: 'zm-address-ed', searchType: 'singleline, validate'}, - {country: 'Zambia', iso3Code: 'ZMB', iso2Code: 'ZM', datasetCode: 'zm-address-eh', searchType: 'autocomplete'}, + {country: 'Zambia', iso3Code: 'ZMB', iso2Code: 'ZM', datasetCode: 'zm-address-eh', searchType: 'autocomplete, lookupv2'}, {country: 'Zimbabwe', iso3Code: 'ZWE', iso2Code: 'ZW', datasetCode: 'zw-address-ed', searchType: 'singleline, validate'}, - {country: 'Zimbabwe', iso3Code: 'ZWE', iso2Code: 'ZW', datasetCode: 'zw-address-eh', searchType: 'autocomplete'} + {country: 'Zimbabwe', iso3Code: 'ZWE', iso2Code: 'ZW', datasetCode: 'zw-address-eh', searchType: 'autocomplete, lookupv2'} ]; diff --git a/src/ts/enrichment-output.ts b/src/ts/enrichment-output.ts new file mode 100644 index 0000000..c16c4cf --- /dev/null +++ b/src/ts/enrichment-output.ts @@ -0,0 +1,177 @@ +export const enrichmentOutput = { + AUS: { + geocodes_title : "AUS Geocodes", + aus_regional_geocodes: { + "latitude": "Latitude", + "longitude": "Longitude", + "match_level": "Match Level", + "sa1": "Sa1", + "meshblock": "Meshblock", + "lga_code": "Lga Code", + "lga_name": "Lga Name", + "street_pid": "Street Pid", + "locality_pid": "Locality Pid", + "geocode_level_code": "Geocode Level Code", + "geocode_level_description": "Geocode Level Description", + "geocode_type_code": "Geocode Type Code", + "geocode_type_description": "Geocode Type Description", + "highest_level_longitude": "Highest Level Longitude", + "highest_level_latitude": "Highest Level Latitude", + "highest_level_geocode_reliability_code": "Highest Level Geocode Reliability Code", + "highest_level_geocode_reliability_description": "Highest Level Geocode Reliability Description", + "confidence_level_code": "Confidence Level Code", + "confidence_level_description": "Confidence Level Description", + "2016_meshblock_id": "2016 Meshblock Id", + "2016_meshblock_code": "2016 Meshblock Code", + "2016_meshblock_match_code": "2016 Meshblock Match Code", + "2016_meshblock_match_description": "2016 Meshblock Match Description", + "collector_district_id": "Collector District Id", + "collector_district_code": "Collector District Code", + "commonwealth_electoral_boundary_id": "Commonwealth Electoral Boundary Id", + "commonwealth_electoral_boundary_name": "Commonwealth Electoral Boundary Name", + "statistical_local_area_id": "Statistical Local Area Id", + "statistical_local_area_code": "Statistical Local Area Code", + "statistical_local_area_name": "Statistical Local Area Name", + "state_electoral_boundary_id": "State Electoral Boundary Id", + "state_electoral_boundary_name": "State Electoral Boundary Name", + "state_electoral_effective_start": "State Electoral Effective Start", + "state_electoral_effective_end": "State Electoral Effective End", + "state_electoral_new_pid": "State Electoral New Pid", + "state_electoral_new_name": "State Electoral New Name", + "state_electoral_new_effective_start": "State Electoral New Effective Start", + "address_level_longitude": "Address Level Longitude", + "address_level_latitude": "Address Level Latitude", + "address_level_geocode_reliability_code": "Address Level Geocode Reliability Code", + "address_level_geocode_reliability_description": "Address Level Geocode Reliability Description", + "street_level_longitude": "Street Level Longitude", + "street_level_latitude": "Street Level Latitude", + "street_level_boundary_extent": "Street Level Boundary Extent", + "street_level_geocode_reliability_code": "Street Level Geocode Reliability Code", + "street_level_geocode_reliability_description": "Street Level Geocode Reliability Description", + "locality_level_longitude": "Locality Level Longitude", + "locality_level_latitude": "Locality Level Latitude", + "locality_level_geocode_reliability_code": "Locality Level Geocode Reliability Code", + "locality_level_geocode_reliability_description": "Locality Level Geocode Reliability Description", + "gnaf_legal_parcel_identifier": "Gnaf Legal Parcel Identifier", + "locality_class_code": "Locality Class Code" + }, + cv_household_title : "AUS Consumer View Household", + aus_cv_household: { + "address": "Address", + "adults_at_address_code": "Adults At Address Code", + "adults_at_address_description": "Adults At Address Description", + "affluence_code": "Affluence Code", + "affluence_description": "Affluence Description", + "channel_preference": "Channel Preference", + "channel_preference_description": "Channel Preference Description", + "children_at_address_code_0_10_years": "Children At Address Code 0 10 Years", + "children_at_address_code_11_18_years": "Children At Address Code 11 18 Years", + "children_at_address_description_0_10_years": "Children At Address Description 0 10 Years", + "children_at_address_description_11_18_years": "Children At Address Description 11 18 Years", + "credit_demand_code": "Credit Demand Code", + "credit_demand_description": "Credit Demand Description", + "gnaf_latitude": "Gnaf Latitude", + "gnaf_longitude": "Gnaf Longitude", + "gnaf_pid": "Gnaf Pid", + "head_of_household_age_code": "Head Of Household Age Code", + "head_of_household_age_description": "Head Of Household Age Description", + "hin": "Hin", + "household_composition_code": "Household Composition Code", + "household_composition_description": "Household Composition Description", + "household_income_code": "Household Income Code", + "household_income_description": "Household Income Description", + "length_of_residence_code": "Length Of Residence Code", + "length_of_residence_description": "Length Of Residence Description", + "lifestage_code": "Lifestage Code", + "lifestage_description": "Lifestage Description", + "local_government_area_code": "Local Government Area Code", + "local_government_area_name": "Local Government Area Name", + "meshblock": "Meshblock", + "mosaic_group": "Mosaic Group", + "mosaic_type": "Mosaic Type", + "postcode": "Postcode", + "residential_flag": "Residential Flag", + "risk_insight_code": "Risk Insight Code", + "risk_insight_description": "Risk Insight Description", + "sa1": "Sa1", + "state": "State", + "suburb": "Suburb" + } + }, + NZL: { + geocodes_title : "NZL Geocodes", + nzl_regional_geocodes: { + "front_of_property_nztm_x_coordinate": "Front of Property NZTM X Coordinate", + "front_of_property_nztm_y_coordinate": "Front of Property NZTM Y Coordinate", + "centroid_of_property_nztm_x_coordinate": "Centroid of Property NZTM X Coordinate", + "centroid_of_property_nztm_y_coordinate": "Centroid of Property NZTM Y Coordinate", + "front_of_property_latitude": "Front of Property Latitude", + "front_of_property_longitude": "Front of Property Longitude", + "centroid_of_property_latitude": "Centroid of Property Latitude", + "centroid_of_property_longitude": "Centroid of Property Longitude", + "linz_parcel_id": "Linz Parcel Id", + "property_purpose_type": "Property Purpose Type", + "addressable": "Addressable", + "mesh_block_code": "Mesh Block Code", + "territorial_authority_code": "Territorial Authority Code", + "territorial_authority_name": "Territorial Authority Name", + "regional_council_code": "Regional Council Code", + "regional_council_name": "Regional Council Name", + "general_electorate_code": "General Electorate Code", + "general_electorate_name": "General Electorate Name", + "maori_electorate_code": "Maori Electorate Code", + "maori_electorate_name": "Maori Electorate Name", + "match_level": "Match Level" + }, + cv_household_title : "NZL Consumer View Household", + nzl_cv_household: { + "adults_at_address": "Adults At Address", + "children_at_address": "Children At Address", + "head_of_household_age": "Head Of Household Age", + "head_of_household_lifestage": "Head Of Household Lifestage", + "household_composition": "Household Composition", + "mosaic_group": "Mosaic Group", + "mosaic_segment": "Mosaic Segment", + "mosaic_type_group": "Mosaic Type Group" + } + }, + USA: { + geocodes_title : "USA Geocodes", + usa_regional_geocodes: { + "latitude": "Latitude", + "longitude": "Longitude", + "match_level": "Match Level", + "census_tract": "Census Tract", + "census_block": "Census Block", + "core_based_statistical_area": "Core Based Statistical Area", + "congressional_district_code": "Congressional District Code", + "county_code": "Country Code" + } + }, + GBR: { + geocodes_title : "GBR Location Essential", + uk_location_essential: { + "latitude": "Latitude", + "longitude": "Longitude", + "match_level": "Match Level", + "udprn": "UDPRN", + "uprn": "UPRN", + "x_coordinate": "X Coordinate", + "y_coordinate": "Y Coordinate" + }, + what3words: { + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Name", + "description": "Description" + } + }, + GLOBAL: { + geocodes_title : "Global Geocodes", + geocodes: { + "latitude": "Latitude", + "longitude": "Longitude", + "match_level": "Match Level" + } + } +}; \ No newline at end of file diff --git a/src/ts/regional-geocodes-description.ts b/src/ts/regional-geocodes-description.ts new file mode 100644 index 0000000..e7f1760 --- /dev/null +++ b/src/ts/regional-geocodes-description.ts @@ -0,0 +1,19 @@ +export const regionalGeocodeDescriptions = { + AUS: { + locality_class_code: [ + {id: "A", title: "ALIAS ONLY LOCALITY"}, + {id: "D", title: "DISTRICT"}, + {id: "G", title: "GAZETTED LOCALITY"}, + {id: "H", title: "HUNDRED"}, + { + id: "I", + title: "INDIGENOUS LOCATION", + description: "Location identified in the Australian government indigenous programs and policy locations (AGIL) dataset available at http://data.gov.au" + }, + {id: "M", title: "MANUALLY VALIDATED"}, + {id: "T", title: "TOPOGRAPHIC LOCALITY"}, + {id: "U", title: "UNOFFICIAL SUBURB"}, + {id: "V", title: "UNOFFICIAL TOPOGRAPHIC FEATURE"} + ] + } +}; \ No newline at end of file diff --git a/src/ts/search-options.ts b/src/ts/search-options.ts index 8ce43ff..7a83c56 100644 --- a/src/ts/search-options.ts +++ b/src/ts/search-options.ts @@ -21,17 +21,35 @@ export enum AddressValidationSearchType { AUTOCOMPLETE = 'autocomplete', SINGLELINE = 'singleline', VALIDATE = 'validate', + LOOKUPV2 = 'lookupv2' } export enum AddressValidationMode { SEARCH = 1, WHAT3WORDS, UDPRN, + LOOKUPV2, } -export enum AddressValidationLookupKeywords { - WHAT3WORDS = 'what3words', - UDPRN = 'udprn', +export const AddressValidationLookupKeywords = { + LOCALITY: {key: "locality", display: 'Locality'}, + POSTAL_CODE: {key: "postal_code", display: "Postal code"}, + UDPRN: {key: "udprn", display: "UDPRN"}, + WHAT3WORDS: {key: "what3words", display: "what3words"}, +} + +export const AddAddressesOptions = { + TRUE: {key: "true", display: 'True'}, + FALSE: {key: "false", display: "False"} +} + +export enum AddressValidationConfidenceType { + NO_MATCHES = 'No matches', + VERIFIED_MATCH = 'Verified match', + INTERACTION_REQUIRED = 'Interaction required', + PREMISES_PARTIAL = 'Premises partial', + STREET_PARTIAL = 'Street partial', + MULTIPLE_MATCHES = 'Multiple matches' } // Default settings diff --git a/webpack.config.js b/webpack.config.js index 815fd2a..0f62c92 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -21,7 +21,8 @@ module.exports = { new CopyPlugin({ patterns: [ { from: './src/images', to: path.resolve(__dirname, 'dist/images') }, - { from: './src/css', to: path.resolve(__dirname, 'dist/css') } + { from: './src/css', to: path.resolve(__dirname, 'dist/css') }, + { from: './src/js', to: path.resolve(__dirname, 'dist/js') } ], }), ],