!function(e){var t={};function a(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.m=e,a.c=t,a.d=function(e,t,o){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(a.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)a.d(o,n,function(t){return e[t]}.bind(null,n));return o},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=10)}([function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.birthdateId=t.ethnicityIds=t.addExistingParam=t.otherIncomeId=t.incomeId=t.emailConfirmErrorMessaage=t.customEmailFieldId=t.emailFieldId=void 0,t.emailFieldId="emailaddress1",t.customEmailFieldId="emailaddressconfirm_custom",t.emailConfirmErrorMessaage="The email addresses you have entered do not match, please try again.",t.incomeId="kbnz_incomesourcetype",t.otherIncomeId="kbnz_othersourcedescription",t.addExistingParam="addExisting",t.ethnicityIds=["kbnz_ethnicity","kbnz_ethnicity2","kbnz_ethnicity3"],t.birthdateId="birthdate"},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.filePrefix=t.locationIds=t.locationPreferenceIds=t.fieldRulesUrl=t.applicationStates=t.assetFieldIds=t.phoneFieldIds=t.stepType=t.contactType=t.pageType=void 0,t.pageType={APPLICATION_DETAILS:"phoapplicationdetails",ADDITIONAL_APPLICANT:"phoadditionalapplicant",ELIGIBILITY:"phoeligibility",SOURCEOFINCOME:"source-of-income",PROFILE:"profile",DEPENDENT:"dependent",SHARE_TRANSACTION:"share-transaction",SHARED_OWNERSHIP:"shared-ownership",DASHBOARD:"dashboard",CONTACT_US:"contact-us",MY_REQUESTS:"my-requests",GOALS_MANAGEMENT:"goals-management"},t.contactType={PRIMARY:"primary",ADDITIONAL:"additional"},t.stepType={A:"A",B:"B",C:"C"},t.phoneFieldIds=["telephone2","mobilephone"],t.assetFieldIds=["kbnz_moneyinbankaccounts","kbnz_sharesstocksandbonds","kbnz_buildingsocietyshares","kbnz_boatorcaravan","kbnz_investmentsinbanks","kbnz_othervehicles","kbnz_anyotherindividualassets"],t.applicationStates={allocated:"973770001",approved:"973770005",approvedInactive:"973770009",declined:"973770006",draft:"1",eligible:"973770004",expired:"973770008",inactive:"2",moreInfo:"973770002",resubmitted:"973770003",submitted:"973770000",withdrawn:"973770007"},t.fieldRulesUrl="/_odata/kbnz_fieldrules",t.locationPreferenceIds=["kbnz_primarylocation","kbnz_secondarylocation"],t.locationIds={AUCKLAND:"2b1c11aa-8286-e911-a97e-000d3ae13260",BAY_OF_PLENTY:"0f1c11aa-8286-e911-a97e-000d3ae13260",CANTERBURY:"211c11aa-8286-e911-a97e-000d3ae13260",GISBORNE:"111c11aa-8286-e911-a97e-000d3ae13260",HAWKES_BAY:"131c11aa-8286-e911-a97e-000d3ae13260",MANAWATU_WANGANUI:"171c11aa-8286-e911-a97e-000d3ae13260",MARLBOROUGH:"1f1c11aa-8286-e911-a97e-000d3ae13260",NELSON:"1d1c11aa-8286-e911-a97e-000d3ae13260",NORTHLAND:"0b1c11aa-8286-e911-a97e-000d3ae13260",SOUTHLAND:"291c11aa-8286-e911-a97e-000d3ae13260",OTAGO:"271c11aa-8286-e911-a97e-000d3ae13260",TARANAKI:"151c11aa-8286-e911-a97e-000d3ae13260",TASMAN:"1b1c11aa-8286-e911-a97e-000d3ae13260",WAIKATO:"0d1c11aa-8286-e911-a97e-000d3ae13260",WELLINGTON:"191c11aa-8286-e911-a97e-000d3ae13260",WEST_COAST:"231c11aa-8286-e911-a97e-000d3ae13260"},t.filePrefix="Uploaded to FHP: "},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.manageEthnicity=void 0;const o=a(0);t.manageEthnicity=()=>{Xrm.Portal.Form.get("kbnz_ethnicityother").setVisible(!1);for(let e of o.ethnicityIds)Xrm.Portal.Form.get(e).attachOnChange(n);n()};const n=()=>{for(let e=1;e<=13;e++)if(11!=e)for(let t of o.ethnicityIds)$(`#${t} option[value='${e}']`).show(),$(`#${t} option[value='${e}']`).removeAttr("disabled");let e=[];for(let t of o.ethnicityIds)e.push(Xrm.Portal.Form.get(t).getValue());let t=!1;e.includes("9")&&(t=!0),e.forEach((function(e,t){""!==e&&o.ethnicityIds.forEach((function(a,o){t!==o&&($(`#${a} option[value='${e}']`).hide(),$(`#${a} option[value='${e}']`).attr("disabled","disabled"))}))})),(e=>{Xrm.Portal.Form.get("kbnz_ethnicityother").setVisible(e),Xrm.Portal.Form.get("kbnz_ethnicityother").setRequired(e),e||Xrm.Portal.Form.get("kbnz_ethnicityother").setValue("")})(t)}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.manageExistingAdditional=void 0;const o=a(0);t.manageExistingAdditional=(e,t)=>{$("#"+o.emailFieldId).on("change",n),$(`#${o.emailFieldId}_label`).parent().append(`
`,i(o.emailFieldId,e,t))};const n=()=>{const e=encodeURI("~/api-contact/?email="+Xrm.Portal.Form.get(o.emailFieldId).getValue());$.ajax({url:e}).done((function(e){e.count>0&&$(`#${o.emailFieldId}-modal`).modal("show")}))},i=(e,t,a)=>`\n \n
\n
\n \n
\n
The user you are attempting to add already exists.
\n
Please associate this contact to your application using the 'Add existing applicants' button on the application page.
\n \n
\n
\n
\n
`},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.manageAttachments=void 0,t.manageAttachments=e=>{e&&o(e),n()};const o=e=>{const t='textarea[aria-label="Note"]';$(t).on("focusin",(function(){let a=$(t).val();a=a.replace(e,""),$(t).val(""+a)})),$(t).on("focusout",(function(){let a=$(t).val();a&&$(t).val(`${e}${a}`)}))},n=()=>{const e='Please change your filename. We do not allow filenames with the following characters: /, , ?, %, *, :, |, ", <, >',t=$(".modal-body").children(".addnote").siblings(".error");$('input[type="file"]').on("change",(function(){$("#custom-filename-error").hide();const a=this.value,o=a.lastIndexOf("\\"),n=a.substring(o+1);if(i(n))if($('input[type="file"]').val(null),t.length>0)t.text(e).show();else{const t=r(e);$(".modal-body").find(".addnote").prepend(t)}}))},i=e=>!!e.match(/[\/\\?%*:|"<>|]/),r=e=>`\n \n ${e}\n
\n `},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.manageBirthdate=void 0;const o=a(0);t.manageBirthdate=()=>{n(o.birthdateId)};const n=e=>{Xrm.Portal.Form.Validation.denyFutureDate(e,"Date of birth cannot be a future date.")}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addButtonToSection=void 0,t.addButtonToSection=(e,t,a)=>{const o=$("legend.section-title");let n;for(var i=0;i `)}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.initXrmPortal=void 0,t.initXrmPortal=e=>{var t=document.createElement("script");t.src="/xrmportalscript.js",t.async=!0,t.onload=e,document.body.appendChild(t)}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getEquityAmount=t.setRelationshipManager=void 0,t.setRelationshipManager=e=>{$.get(`/_odata/kbnz_sharedownershipagreements?$filter=kbnz_sharedownershipagreementid%20eq%20guid%27${e}%27`,(function(e){if(e&&e.value&&e.value.length>0){let t=e.value[0];t.ownerid&&t.ownerid.Name&&$("#ko_relationshipmanager").text(t.ownerid.Name)}}))},t.getEquityAmount=(e,t)=>{$.get(`/_odata/kbnz_shareregisters?$filter=kbnz_shareregisterid%20eq%20guid%27${e}%27`,(function(e){var a,o;if(e&&e.value){let n=e.value[0];if(n){let e=null!==(a=n.kbnz_equityamount)&&void 0!==a?a:0,i=null!==(o=n.kbnz_propertyvalue)&&void 0!==o?o:0;t(e,i)}}}))}},,function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const o=a(11),n=a(0),i=a(1),r=a(13),s=a(2),l=a(14),d=a(15),c=a(16),u=a(17),m=a(18),p=a(19),g=a(3),f=a(20),b=a(21),h=a(22),_=a(4),y=a(23),v=a(24),P=a(25),I=a(26),k=a(5),F=a(27),A=a(28),T=a(29),O=a(30),E=a(7),S=a(31),z=a(33),x=a(34);$(()=>{!function(){let e=!0;if("undefined"!=typeof page)switch(page!==i.pageType.APPLICATION_DETAILS&&h.manageErrors(),page){case i.pageType.APPLICATION_DETAILS:C();break;case i.pageType.ADDITIONAL_APPLICANT:M();break;case i.pageType.ELIGIBILITY:N();break;case i.pageType.SOURCEOFINCOME:m.initSourceOfIncome(),B();break;case i.pageType.PROFILE:D();break;case i.pageType.DEPENDENT:F.manageDependentBirthdate();break;case i.pageType.SHARE_TRANSACTION:B(),E.initXrmPortal(O.initShareTransaction);break;case i.pageType.SHARED_OWNERSHIP:S.initSharedOwnershipAgreement();break;case i.pageType.CONTACT_US:case i.pageType.MY_REQUESTS:z.autocompleteOff();break;case i.pageType.GOALS_MANAGEMENT:x.initGoalsManagement();break;case i.pageType.DASHBOARD:e=!1}e&&v.renderPage()}()});const C=()=>{r.loadHelpText(),b.manageApplicationButtons(),I.disableRemovePrimaryContact();new URLSearchParams(window.location.search).has(n.addExistingParam)&&setTimeout((function(){$('a[title="Associate"]').trigger("click")}),2e3)},M=()=>{switch(step){case i.stepType.A:w();break;case i.stepType.B:X();break;case i.stepType.C:R()}},w=()=>{r.loadHelpText(),o.addCopyAddressButton(),o.downloadAddressFinder(PHO_KEY),s.manageEthnicity(),l.addEmailConfirmationField(),d.managePhoneNumbers(i.phoneFieldIds),g.manageExistingAdditional(i.pageType.APPLICATION_DETAILS,n.addExistingParam),k.manageBirthdate(),q()},X=()=>{B(),r.loadHelpText(),m.manageInsertIncome(),y.manageSectionVisibility(),P.manageLocations(),A.addDescriptionToSection("Source Of Income",INCOME_DESCRIPTION_HTML)},R=()=>{r.loadHelpText(),u.setStatutoryLabel(),f.manageUseExistingDocuments(),_.manageAttachments(i.filePrefix),c.addPrivacyStatementButton(),A.addDescriptionToSection("Attachment Checklist",ATTACHMENT_DESCRIPTION_HTML)},N=()=>{switch(step){case i.stepType.A:j();break;case i.stepType.B:V();break;case i.stepType.C:L()}},j=()=>{r.loadHelpText(),o.addCopyAddressButton(),o.downloadAddressFinder(PHO_KEY),s.manageEthnicity(),d.managePhoneNumbers(i.phoneFieldIds),k.manageBirthdate(),q()},V=()=>{switch(B(),r.loadHelpText(),m.manageEditIncome(),y.manageSectionVisibility(),T.solicitorRequiredOrCleared(),T.solicitorLookup(),P.manageLocations(),A.addDescriptionToSection("Source Of Income",INCOME_DESCRIPTION_HTML),contact){case i.contactType.PRIMARY:p.manageAssetTotal()}},L=()=>{R()},D=()=>{s.manageEthnicity(),d.managePhoneNumbers(i.phoneFieldIds)},B=()=>{$("div:not(.input-group) > input.money:not(.readonly)").parent().prepend('$ '),$("div:not(.input-group) > input.money:not(.readonly)").parent().addClass("input-group")},q=()=>{$("input[type='text']").attr("autocomplete","nope"),$("input[type='email']").attr("autocomplete","nope")}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addCopyAddressButton=t.downloadAddressFinder=void 0;const o=a(12),n=a(6),i={address_params:{post_box:"0"}},r={address_params:{delivered:"1"}};t.downloadAddressFinder=e=>{var t=document.createElement("script");t.src="https://api.addressfinder.io/assets/v3/widget.js",t.async=!0,t.onload=function(){s(e)},document.body.appendChild(t)};const s=e=>{l(o.physicalAddressFieldIds,i,e),l(o.postalAddressFieldIds,r,e)},l=(e,t,a)=>{new AddressFinder.Widget(document.getElementById(e.line1),a,"NZ",t).on("address:select",(function(t,a){d(e,a)}))},d=(e,t)=>{Xrm.Portal.Form.get(e.line1).setValue(t.address_line_1),Xrm.Portal.Form.get(e.line2).setValue(t.address_line_2||""),Xrm.Portal.Form.get(e.line3).setValue(t.suburb),Xrm.Portal.Form.get(e.city).setValue(t.city),Xrm.Portal.Form.get(e.postalCode).setValue(t.postcode),$("#"+e.countryId).val($(`select[id="${e.countryId}"] option:contains('New Zealand')`).val()),t.ta&&$("#"+e.territorialAuthorityId).val($(`select[id="${e.territorialAuthorityId}"] option:contains("${t.ta}")`).val())};t.addCopyAddressButton=()=>{n.addButtonToSection("postal address","copy-address-button","Copy physical address"),$("#copy-address-button").on("click",c)};const c=()=>{Object.keys(o.physicalAddressFieldIds).map((function(e,t){Xrm.Portal.Form.get(o.postalAddressFieldIds[e]).setValue(Xrm.Portal.Form.get(o.physicalAddressFieldIds[e]).getValue())}))}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.physicalAddressFieldIds=t.postalAddressFieldIds=void 0,t.postalAddressFieldIds={line1:"address2_line1",line2:"address2_line2",line3:"address2_line3",city:"address2_city",postalCode:"address2_postalcode",countryId:"kbnz_postaladdresscountryid",territorialAuthorityId:"kbnz_postaladdressterritorialauthorityid"},t.physicalAddressFieldIds={line1:"address1_line1",line2:"address1_line2",line3:"address1_line3",city:"address1_city",postalCode:"address1_postalcode",countryId:"kbnz_physicaladdresscountryid",territorialAuthorityId:"kbnz_physicaladdressterritorialauthorityid"}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadHelpText=void 0,t.loadHelpText=()=>{$.ajax({type:"GET",url:helpTextOdataUrl,dataType:"json",success:function(e){let t=e.value,a=t.filter((function(e){return e.kbnz_entityform}));t.filter((function(e){return!e.kbnz_entityform})).forEach((function(e,t){-1===o(a,"kbnz_name",e.kbnz_name)&&a.push(e)}));for(const[e,t]of Object.entries(a))Xrm.Portal.Form.get(t.kbnz_name).id&&(n({field:t.kbnz_name,helptextheading:t.kbnz_helptextheading,helptext:t.kbnz_helptext}),"birthdate"===t.kbnz_name?$(`#${t.kbnz_name}_datepicker_description`).attr("placeholder",t.kbnz_placeholdertext):$("#"+t.kbnz_name).attr("placeholder",t.kbnz_placeholdertext))}})};const o=(e,t,a)=>{for(var o=0;o{$(`#${e.field}_label`).parent().append(``,i(e))},i=e=>`\n `},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.makeEmailReadOnly=t.addEmailConfirmationField=void 0;const o=a(0);t.addEmailConfirmationField=()=>{const e=n();$("#"+o.emailFieldId).closest("td").after(e),Xrm.Portal.Form.get(""+o.customEmailFieldId).setRequired(!0,i,o.emailConfirmErrorMessaage)};const n=()=>`\n \n \n Confirm Email \n
\n \n \n
\n `,i=()=>Xrm.Portal.Form.get(""+o.emailFieldId).getValue()===Xrm.Portal.Form.get(""+o.customEmailFieldId).getValue();t.makeEmailReadOnly=()=>{Xrm.Portal.Form.get(o.emailFieldId).setDisable(!0)}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.managePhoneNumbers=void 0,t.managePhoneNumbers=e=>{for(let t of e)$("#"+t).on("change",(function(){o(e)}));o(e)};const o=e=>{let t=!0;for(let a of e)if(t=!Xrm.Portal.Form.get(""+a).getValue(),!t)break;for(let a of e)n(t,a)},n=(e,t)=>{e?Xrm.Portal.Form.get(""+t).setRequired(!0,void 0,"Please enter at least 1 contact phone number."):Xrm.Portal.Form.get(""+t).setRequired(!1)}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrivacyStatementButton=void 0;const o=a(6);t.addPrivacyStatementButton=()=>{const e="privacy-statement-button";o.addButtonToSection("privacy statement",e,"View privacy statement"),$("#"+e).attr("data-toggle","modal"),$("#"+e).attr("data-target","#privModal")}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setStatutoryLabel=void 0,t.setStatutoryLabel=()=>{$("#kbnz_statutorydeclarationpho_label").text(""),$("#kbnz_statutorydeclarationpho_label").prepend('First Home Partner Statutory Declaration ')}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.initSourceOfIncome=t.manageInsertIncome=t.manageEditIncome=void 0;const o=a(0),n=a(7);t.manageEditIncome=()=>{i(),Xrm.Portal.Form.get("SourceOfIncome").attachOnChange(i)};const i=()=>{const e=window.location.search,t=new URLSearchParams(e).get("id");s(t)};t.manageInsertIncome=()=>{r(),Xrm.Portal.Form.get("SourceOfIncome").attachOnChange(r)};const r=()=>{const e=$("#EntityFormView_EntityID").val();s(e)},s=e=>{const t=encodeURI(`~/_odata/kbnz_sourcesofincomes?$filter=kbnz_contact/Id eq (guid'${e}')`);let a=0;$.ajax({type:"GET",url:t,dataType:"json",success:function(e){for(var t=0;t{function e(){"973770008"===Xrm.Portal.Form.get(o.incomeId).getValue()?($("#"+o.otherIncomeId).closest("tr").show(),Xrm.Portal.Form.get(o.otherIncomeId).setRequired(!0)):($("#"+o.otherIncomeId).closest("tr").hide(),Xrm.Portal.Form.get(o.otherIncomeId).setRequired(!1),Xrm.Portal.Form.get(o.otherIncomeId).setValue(""))}n.initXrmPortal((function(){Xrm.Portal.Form.get(o.incomeId).attachOnChange(e),e()}))}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.manageAssetTotal=void 0;const o=a(1);t.manageAssetTotal=()=>{for(const e of o.assetFieldIds)Xrm.Portal.Form.get(e).attachOnChange(n)};const n=()=>{let e=0;for(const t of o.assetFieldIds){const a=Xrm.Portal.Form.get(t).getValue().replace(/[,]+/g,"");i(a)&&(e+=parseFloat(a))}const t=r(e.toFixed(2));Xrm.Portal.Form.get("kbnz_totalassets").setValue("$"+t)},i=e=>!isNaN(e)&&""!==e,r=e=>e.replace(/\B(?=(\d{3})+(?!\d))/g,",")},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.manageUseExistingDocuments=void 0,t.manageUseExistingDocuments=()=>{$("#kbnz_use_kbnz_documents").closest("tr").hide();!1===Xrm.Portal.Form.get("kbnz_use_kbnz_documents").getValue()&&$("#kbnz_useexisting").closest("tr").hide()}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.manageApplicationButtons=void 0;const o=a(1);t.manageApplicationButtons=()=>{const e=Xrm.Portal.Form.get("statuscode_EntityStatus").getValue().id;n(e),i(e),r(e)};const n=e=>{const t=$('input[title="Submit"]');switch(e){case o.applicationStates.moreInfo:break;default:t.hide()}},i=e=>{const t=$('button[data-modal-title="Withdraw application"]');switch(e){case o.applicationStates.withdrawn:case o.applicationStates.approved:case o.applicationStates.approvedInactive:case o.applicationStates.draft:case o.applicationStates.expired:case o.applicationStates.inactive:t.hide()}},r=e=>{const t=$('button[data-modal-title="Activate application"]');switch(e){case o.applicationStates.withdrawn:break;default:t.hide()}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.manageErrors=void 0,t.manageErrors=()=>{1===$("body > div.alert.alert-block.alert-danger").length&&($("body > div.alert.alert-block.alert-danger").hide(),o()),1!==$("#MessagePanel").length||$("#MessagePanel").hasClass("success")||($("#MessagePanel").hide(),o())};const o=()=>{$(".validation-summary").html($("#generic-error-message").html()),$(".validation-summary").show()}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.manageSectionVisibility=void 0;const o=a(1);t.manageSectionVisibility=()=>{$.ajax({type:"GET",url:o.fieldRulesUrl,dataType:"json",success:function(e){const t=e.value;for(let e of t){const t=e.kbnz_toggleelementid,a=Xrm.Portal.Form.get(t);if(a){$(`table[data-name='${e.kbnz_elementidtochange}']`).closest("fieldset").addClass("collapsible-section"),a.attachOnChange((function(){n(e.kbnz_toggleelementid,e.kbnz_elementidtochange,e.kbnz_showwhentoggleelementvalueis)}));a.getValue()===e.kbnz_showwhentoggleelementvalueis||i(!1,e.kbnz_elementidtochange)}}},error:function(e){console.error(e)}})};const n=(e,t,a)=>{const o=Xrm.Portal.Form.get(e).getValue()===a;i(o,t)},i=(e,t)=>{e?$(`table[data-name='${t}']`).closest("fieldset").addClass("open"):$(`table[data-name='${t}']`).closest("fieldset").removeClass("open")}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.renderPage=void 0,t.renderPage=function(){$(".site-container").fadeIn("slow"),$(".loading").hide(),$("#loading-alert").attr("aria-busy","false")}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.manageLocations=void 0;const o=a(1);t.manageLocations=()=>{for(let e of o.locationPreferenceIds)Xrm.Portal.Form.get(e).attachOnChange(n);n()};const n=()=>{for(const[e,t]of Object.entries(o.locationIds))for(let e of o.locationPreferenceIds)$(`#${e} option[value='${t}']`).show(),$(`#${e} option[value='${t}']`).removeAttr("disabled");let e=[];for(let t of o.locationPreferenceIds)e.push(Xrm.Portal.Form.get(t).getValue());let t=!1;e.includes(o.locationPreferenceIds)&&(t=!0),e.forEach((function(e,t){""!==e&&o.locationPreferenceIds.forEach((function(a,o){t!==o&&($(`#${a} option[value='${e}']`).hide(),$(`#${a} option[value='${e}']`).attr("disabled","disabled"))}))}))}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.disableRemovePrimaryContact=void 0,t.disableRemovePrimaryContact=()=>{const e=Xrm.Portal.Form.get("kbnz_pointofcontact").getValue().id;$("#Applicants > .entity-grid.subgrid").on("loaded",(function(){$(`tr[data-id="${e}"] a[title="Remove"]`).hide()}))}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.manageDependentBirthdate=void 0,t.manageDependentBirthdate=()=>{console.log("managing dependent bday");var e=document.createElement("script");e.src="/xrmportalscript.js",console.log("source is : "+e.src),e.async=!0,e.onload=function(){Xrm.Portal.Form.Validation.denyFutureDate("kbnz_dateofbirth","Date of birth cannot be a future date.")},document.body.appendChild(e)}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addDescriptionToSection=void 0,t.addDescriptionToSection=(e,t)=>{const a=$("legend.section-title");let o;for(var n=0;n{Xrm.Portal.Form.get("kbnz_solicitorhelp").attachOnChange(()=>{"0"==Xrm.Portal.Form.get("kbnz_solicitorhelp").getValue()?(Xrm.Portal.Form.get("kbnz_solicitorfirstname").setValue(""),Xrm.Portal.Form.get("kbnz_solicitorlastname").setValue(""),Xrm.Portal.Form.get("kbnz_solicitoremailaddress").setValue(""),Xrm.Portal.Form.get("kbnz_solicitorfirstname").setRequired(!1),Xrm.Portal.Form.get("kbnz_solicitorlastname").setRequired(!1),Xrm.Portal.Form.get("kbnz_solicitoremailaddress").setRequired(!1)):(Xrm.Portal.Form.get("kbnz_solicitorfirstname").setRequired(!0),Xrm.Portal.Form.get("kbnz_solicitorlastname").setRequired(!0),Xrm.Portal.Form.get("kbnz_solicitoremailaddress").setRequired(!0))})},t.solicitorLookup=()=>{!Xrm.Portal.Form.get("kbnz_solicitor").getValue()||Xrm.Portal.Form.get("kbnz_solicitor").getValue()&&""===Xrm.Portal.Form.get("kbnz_solicitor").getValue().id?(Xrm.Portal.Form.get("kbnz_solicitor").setVisible(!1),Xrm.Portal.Form.get("Solicitor_email_quickview").setVisible(!1)):$("#kbnz_solicitorhelp_label").text("Do you need to update your solicitor's details?")}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.initShareTransaction=void 0,t.initShareTransaction=()=>{$('table[data-name="General"] > tbody > tr').not(":first").remove();let e=1e3;maxEquity<=e&&(e=maxEquity),Xrm.Portal.Form.Validation.setNumberRange("kbnz_amount",e,maxEquity,`please enter a value between $${e} and $${maxEquity}`,!0)}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.initSharedOwnershipAgreement=void 0;const o=a(32),n=a(8);t.initSharedOwnershipAgreement=()=>{const e=$("#userId").val()==Xrm.Portal.Form.get("kbnz_sharedownerpointofcontact").getValue().id;r(),s(),l(),$("#Share_Transactions > .entity-grid.subgrid").on("loaded",d),e&&$("#Share_Transactions > .entity-grid.subgrid").on("loaded",(function(){$('#Share_Transactions td[aria-label="action menu"]').show(),i(!1),$.get("/_odata/kbnz_sharepurchasetransactions?$top=1&$filter=statuscode/Value%20eq%201",(function(e){e.value&&0===e.value.length?i(!0):c()}))}))};const i=e=>{$('#Share_Transactions a[title="Create"]').toggle(e)},r=()=>{const e=Xrm.Portal.Form.get("kbnz_property").getValue();e&&$.get(`/_odata/kbnz_phoproperties?$filter=kbnz_phopropertyid%20eq%20guid%27${e.id}%27`,(function(e){if(e&&e.value){let t=e.value[0];$("#ko_line1").text(t.kbnz_line1),$("#ko_line2").text(t.kbnz_line2),$("#ko_line3").text(`${t.kbnz_city} ${t.kbnz_postalcode}`)}}))},s=()=>{let e=o.getParameterByName("Id");e&&n.setRelationshipManager(e)},l=()=>{const e=Xrm.Portal.Form.get("kbnz_currentshareregister").getValue();e&&n.getEquityAmount(e.id,e=>{e&&$("#ko_currentequity").text("$"+parseFloat(e).toFixed(2))})},d=()=>{document.querySelectorAll("[data-attribute='kbnz_percentagetobepurchased']").forEach((function(e){e.innerText+="%"}))},c=()=>{$("#ko_sharetransactionnotification").show()}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getParameterByName=void 0,t.getParameterByName=(e,t=window.location.href)=>{e=e.replace(/[\[\]]/g,"\\$&");var a=new RegExp("[?&]"+e+"(=([^]*)|&|#|$)").exec(t);return a?a[2]?decodeURIComponent(a[2].replace(/\+/g," ")):"":null}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.autocompleteOff=void 0,t.autocompleteOff=()=>{$("form").attr("autocomplete","off")}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.showReportSection=t.initGoalsManagement=void 0;const o=a(8);t.initGoalsManagement=()=>{$("#ko_propertydetails").detach().appendTo('fieldset[aria-label="General"]'),t.showReportSection(),i(),n()},t.showReportSection=()=>{const e=Xrm.Portal.Form.get("statuscode_EntityStatus").getValue();"973770003"!==e.id&&"2"!==e.id||$('fieldset[aria-label="Agreed Financial Situation"]').show()};const n=()=>{const e=Xrm.Portal.Form.get("kbnz_shareregister").getValue();e&&o.getEquityAmount(e.id,(e,t)=>{if(e&&t){let a=t-e;$("#ko_homeownershare").text("$"+a.toFixed(2)),$("#ko_propertyvalue").text("$"+parseFloat(t).toFixed(2)),$("#ko_currentequity").text("$"+parseFloat(e).toFixed(2))}})},i=()=>{let e=Xrm.Portal.Form.get("kbnz_sharedownershipagreementid").getValue();e&&o.setRelationshipManager(e.id)}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvY29tbW9uL2NvbnN0YW50cy50cyIsIndlYnBhY2s6Ly8vLi93ZWJyZXNvdXJjZXMvc3JjL3RzL3BvcnRhbC9zaXRlcy9waG8vY29uc3RhbnRzLnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL2NvbW1vbi9ldGhuaWNpdHkudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvY29tbW9uL2FkZGl0aW9uYWwtYXBwbGljYW50LnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL2NvbW1vbi9hdHRhY2htZW50LnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL2NvbW1vbi9iaXJ0aGRhdGUudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvY29tbW9uL2FkZC1idXR0b24udHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvY29tbW9uL2xvYWQteHJtLnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL3NpdGVzL3Boby9jb21tb24vc29hLW9kYXRhLnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL3NpdGVzL3Boby9waG8tcG9ydGFsLnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL2NvbW1vbi9hZGRyZXNzLnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL2VudGl0aWVzL2NvbnRhY3QudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvY29tbW9uL2hlbHAtdGV4dC50cyIsIndlYnBhY2s6Ly8vLi93ZWJyZXNvdXJjZXMvc3JjL3RzL3BvcnRhbC9jb21tb24vZW1haWwudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvY29tbW9uL3Bob25lLnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL2NvbW1vbi9wcml2YWN5LXN0YXRlbWVudC50cyIsIndlYnBhY2s6Ly8vLi93ZWJyZXNvdXJjZXMvc3JjL3RzL3BvcnRhbC9zaXRlcy9waG8vc3RhdHV0b3J5LWRlY2xhcmF0aW9uLnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL2NvbW1vbi9pbmNvbWUudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvc2l0ZXMvcGhvL2Fzc2V0cy50cyIsIndlYnBhY2s6Ly8vLi93ZWJyZXNvdXJjZXMvc3JjL3RzL3BvcnRhbC9zaXRlcy9waG8va2Juei1kb2N1bWVudHMudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvc2l0ZXMvcGhvL21hbmFnZS1hcHBsaWNhdGlvbi1idXR0b25zLnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL3NpdGVzL3Boby9tYW5hZ2UtZXJyb3JzLnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL3NpdGVzL3Boby9zZWN0aW9ucy50cyIsIndlYnBhY2s6Ly8vLi93ZWJyZXNvdXJjZXMvc3JjL3RzL3BvcnRhbC9jb21tb24vcmVuZGVyLXBhZ2UudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvc2l0ZXMvcGhvL2xvY2F0aW9uLXByZWZlcmVuY2UudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvc2l0ZXMvcGhvL2Rpc2FibGUtcmVtb3ZlLXByaW1hcnkudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvc2l0ZXMvcGhvL2RlcGVuZGVudHMudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvY29tbW9uL2FkZC1kZXNjcmlwdGlvbi50cyIsIndlYnBhY2s6Ly8vLi93ZWJyZXNvdXJjZXMvc3JjL3RzL3BvcnRhbC9zaXRlcy9waG8vcGFnZXMvZWxpZ2liaWxpdHktcGFydC1iLnRzIiwid2VicGFjazovLy8uL3dlYnJlc291cmNlcy9zcmMvdHMvcG9ydGFsL3NpdGVzL3Boby9wYWdlcy9zaGFyZS10cmFuc2FjdGlvbi50cyIsIndlYnBhY2s6Ly8vLi93ZWJyZXNvdXJjZXMvc3JjL3RzL3BvcnRhbC9zaXRlcy9waG8vcGFnZXMvc2hhcmVkLW93bmVyc2hpcC1hZ3JlZW1lbnQudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvY29tbW9uL3VybC1oZWxwZXIudHMiLCJ3ZWJwYWNrOi8vLy4vd2VicmVzb3VyY2VzL3NyYy90cy9wb3J0YWwvY29tbW9uL2Zvcm0taGVscGVycy50cyIsIndlYnBhY2s6Ly8vLi93ZWJyZXNvdXJjZXMvc3JjL3RzL3BvcnRhbC9zaXRlcy9waG8vcGFnZXMvZ29hbHMtbWFuYWdlbWVudC50cyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImVtYWlsRmllbGRJZCIsImN1c3RvbUVtYWlsRmllbGRJZCIsImVtYWlsQ29uZmlybUVycm9yTWVzc2FhZ2UiLCJpbmNvbWVJZCIsIm90aGVySW5jb21lSWQiLCJhZGRFeGlzdGluZ1BhcmFtIiwiZXRobmljaXR5SWRzIiwiYmlydGhkYXRlSWQiLCJwYWdlVHlwZSIsIkFQUExJQ0FUSU9OX0RFVEFJTFMiLCJBRERJVElPTkFMX0FQUExJQ0FOVCIsIkVMSUdJQklMSVRZIiwiU09VUkNFT0ZJTkNPTUUiLCJQUk9GSUxFIiwiREVQRU5ERU5UIiwiU0hBUkVfVFJBTlNBQ1RJT04iLCJTSEFSRURfT1dORVJTSElQIiwiREFTSEJPQVJEIiwiQ09OVEFDVF9VUyIsIk1ZX1JFUVVFU1RTIiwiR09BTFNfTUFOQUdFTUVOVCIsImNvbnRhY3RUeXBlIiwiUFJJTUFSWSIsIkFERElUSU9OQUwiLCJzdGVwVHlwZSIsIkEiLCJCIiwiQyIsInBob25lRmllbGRJZHMiLCJhc3NldEZpZWxkSWRzIiwiYXBwbGljYXRpb25TdGF0ZXMiLCJhbGxvY2F0ZWQiLCJhcHByb3ZlZCIsImFwcHJvdmVkSW5hY3RpdmUiLCJkZWNsaW5lZCIsImRyYWZ0IiwiZWxpZ2libGUiLCJleHBpcmVkIiwiaW5hY3RpdmUiLCJtb3JlSW5mbyIsInJlc3VibWl0dGVkIiwic3VibWl0dGVkIiwid2l0aGRyYXduIiwiZmllbGRSdWxlc1VybCIsImxvY2F0aW9uUHJlZmVyZW5jZUlkcyIsImxvY2F0aW9uSWRzIiwiQVVDS0xBTkQiLCJCQVlfT0ZfUExFTlRZIiwiQ0FOVEVSQlVSWSIsIkdJU0JPUk5FIiwiSEFXS0VTX0JBWSIsIk1BTkFXQVRVX1dBTkdBTlVJIiwiTUFSTEJPUk9VR0giLCJORUxTT04iLCJOT1JUSExBTkQiLCJTT1VUSExBTkQiLCJPVEFHTyIsIlRBUkFOQUtJIiwiVEFTTUFOIiwiV0FJS0FUTyIsIldFTExJTkdUT04iLCJXRVNUX0NPQVNUIiwiZmlsZVByZWZpeCIsIm1hbmFnZUV0aG5pY2l0eSIsIlhybSIsIlBvcnRhbCIsIkZvcm0iLCJzZXRWaXNpYmxlIiwiZWxlbWVudCIsImF0dGFjaE9uQ2hhbmdlIiwibWFuYWdlTXVsdGlwbGVFdGhuaWNpdGllcyIsIiQiLCJzaG93IiwicmVtb3ZlQXR0ciIsInZhbHVlcyIsInB1c2giLCJnZXRWYWx1ZSIsInNob3dPdGhlciIsImluY2x1ZGVzIiwiZm9yRWFjaCIsImluZGV4IiwiaW5kZXgyIiwiaGlkZSIsImF0dHIiLCJzZXRSZXF1aXJlZCIsInNldFZhbHVlIiwidG9nZ2xlRXRobmljaXR5T3RoZXIiLCJtYW5hZ2VFeGlzdGluZ0FkZGl0aW9uYWwiLCJwYXJ0aWFsUmVkaXJlY3RVcmwiLCJxdWVyeVBhcmFtIiwib24iLCJjaGVja0R1cGxpY2F0ZUVtYWlsIiwicGFyZW50IiwiYXBwZW5kIiwiZGVmaW5lQXNzb2NpYXRlTW9kYWwiLCJlbWFpbENoZWNrVXJsIiwiZW5jb2RlVVJJIiwiYWpheCIsInVybCIsImRvbmUiLCJkYXRhIiwiY291bnQiLCJtb2RhbCIsImZpZWxkIiwibWFuYWdlQXR0YWNobWVudHMiLCJmaWxlbmFtZVByZWZpeCIsInByZWZpeEF0dGFjaG1lbnROb3RlIiwicHJldmVudFNwZWNpYWxDaGFyYWN0ZXJzIiwicHJlZml4Iiwibm90ZUNvbnRyb2wiLCJub3RlIiwidmFsIiwicmVwbGFjZSIsImVycm9yTWVzc2FnZSIsImVycm9yU2VsZWN0b3IiLCJjaGlsZHJlbiIsInNpYmxpbmdzIiwic3RyIiwidGhpcyIsImxhc3RJbmRleE9mIiwicmVzdWx0Iiwic3Vic3RyaW5nIiwiaGFzU3BlY2lhbENoYXJhY3RlcnMiLCJsZW5ndGgiLCJ0ZXh0IiwiaHRtbEVycm9yIiwibWFrZUVycm9yRGl2IiwiZmluZCIsInByZXBlbmQiLCJtYXRjaCIsIm1hbmFnZUJpcnRoZGF0ZSIsImRlbnlGdXR1cmVCaXJ0aGRhdGUiLCJmaWVsZElkIiwiVmFsaWRhdGlvbiIsImRlbnlGdXR1cmVEYXRlIiwiYWRkQnV0dG9uVG9TZWN0aW9uIiwic2VjdGlvblRpdGxlIiwiYnV0dG9uSWQiLCJidXR0b25MYWJlbCIsInNlY3Rpb25zIiwic2VjdGlvbiIsImlubmVySFRNTCIsInRvTG93ZXJDYXNlIiwiaW5pdFhybVBvcnRhbCIsIm9uTG9hZCIsInNjcmlwdCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNyYyIsImFzeW5jIiwib25sb2FkIiwiYm9keSIsImFwcGVuZENoaWxkIiwic2V0UmVsYXRpb25zaGlwTWFuYWdlciIsInNvYUlkIiwib3duZXJpZCIsIk5hbWUiLCJnZXRFcXVpdHlBbW91bnQiLCJzaGFyZVJlZ2lzdGVySWQiLCJzdWNjZXNzIiwiZXF1aXR5Iiwia2Juel9lcXVpdHlhbW91bnQiLCJwcm9wZXJ0eVZhbHVlIiwia2Juel9wcm9wZXJ0eXZhbHVlIiwicmVuZGVyIiwicGFnZSIsIm1hbmFnZUVycm9ycyIsImluaXRBcHBsaWNhdGlvbkRldGFpbHNTZXR0aW5ncyIsImluaXRBZGRpdGlvbmFsQXBwbGljYW50U2V0dGluZ3MiLCJpbml0RWxpZ2liaWxpdHlTZXR0aW5ncyIsImluaXRTb3VyY2VPZkluY29tZSIsImRvbGxhclNpZ25zVG9DdXJyZW5jeUZpZWxkcyIsImluaXRQcm9maWxlU2V0dGluZ3MiLCJtYW5hZ2VEZXBlbmRlbnRCaXJ0aGRhdGUiLCJpbml0U2hhcmVUcmFuc2FjdGlvbiIsImluaXRTaGFyZWRPd25lcnNoaXBBZ3JlZW1lbnQiLCJhdXRvY29tcGxldGVPZmYiLCJpbml0R29hbHNNYW5hZ2VtZW50IiwicmVuZGVyUGFnZSIsImxvYWRDdXN0b21pc2F0aW9uIiwibG9hZEhlbHBUZXh0IiwibWFuYWdlQXBwbGljYXRpb25CdXR0b25zIiwiZGlzYWJsZVJlbW92ZVByaW1hcnlDb250YWN0IiwiVVJMU2VhcmNoUGFyYW1zIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJoYXMiLCJzZXRUaW1lb3V0IiwidHJpZ2dlciIsInN0ZXAiLCJpbml0QWRkaXRpb25hbFBhcnRBIiwiaW5pdEFkZGl0aW9uYWxQYXJ0QiIsImluaXRBZGRpdGlvbmFsUGFydEMiLCJhZGRDb3B5QWRkcmVzc0J1dHRvbiIsImRvd25sb2FkQWRkcmVzc0ZpbmRlciIsIlBIT19LRVkiLCJhZGRFbWFpbENvbmZpcm1hdGlvbkZpZWxkIiwibWFuYWdlUGhvbmVOdW1iZXJzIiwidHVybk9mZkF1dG9jb21wbGV0ZSIsIm1hbmFnZUluc2VydEluY29tZSIsIm1hbmFnZVNlY3Rpb25WaXNpYmlsaXR5IiwibWFuYWdlTG9jYXRpb25zIiwiYWRkRGVzY3JpcHRpb25Ub1NlY3Rpb24iLCJJTkNPTUVfREVTQ1JJUFRJT05fSFRNTCIsInNldFN0YXR1dG9yeUxhYmVsIiwibWFuYWdlVXNlRXhpc3RpbmdEb2N1bWVudHMiLCJhZGRQcml2YWN5U3RhdGVtZW50QnV0dG9uIiwiQVRUQUNITUVOVF9ERVNDUklQVElPTl9IVE1MIiwiaW5pdEVsaWdpYmlsaXR5UGFydEEiLCJpbml0RWxpZ2liaWxpdHlQYXJ0QiIsImluaXRFbGlnaWJpbGl0eVBhcnRDIiwibWFuYWdlRWRpdEluY29tZSIsInNvbGljaXRvclJlcXVpcmVkT3JDbGVhcmVkIiwic29saWNpdG9yTG9va3VwIiwiY29udGFjdCIsIm1hbmFnZUFzc2V0VG90YWwiLCJhZGRDbGFzcyIsInBoeXNpY2FsQWRkcmVzc0ZpbmRlck9wdGlvbnMiLCJhZGRyZXNzX3BhcmFtcyIsInBvc3RfYm94IiwicG9zdGFsQWRkcmVzc0ZpbmRlck9wdGlvbnMiLCJkZWxpdmVyZWQiLCJhZGRyS2V5IiwiaW5pdEFkZHJlc3NGaW5kZXIiLCJiaW5kQWRkcmVzc0ZpbmRlciIsInBoeXNpY2FsQWRkcmVzc0ZpZWxkSWRzIiwicG9zdGFsQWRkcmVzc0ZpZWxkSWRzIiwiYWRkcmVzc0ZpZWxkcyIsIm9wdGlvbnMiLCJBZGRyZXNzRmluZGVyIiwiV2lkZ2V0IiwiZ2V0RWxlbWVudEJ5SWQiLCJsaW5lMSIsIl8iLCJmaWxsQWRkcmVzc0ZpZWxkcyIsImFkZHJlc3NGaWVsZElkcyIsIm1ldGFEYXRhIiwiYWRkcmVzc19saW5lXzEiLCJsaW5lMiIsImFkZHJlc3NfbGluZV8yIiwibGluZTMiLCJzdWJ1cmIiLCJjaXR5IiwicG9zdGFsQ29kZSIsInBvc3Rjb2RlIiwiY291bnRyeUlkIiwidGEiLCJ0ZXJyaXRvcmlhbEF1dGhvcml0eUlkIiwiY29weUFkZHJlc3MiLCJrZXlzIiwibWFwIiwidHlwZSIsImhlbHBUZXh0T2RhdGFVcmwiLCJkYXRhVHlwZSIsImZvcm1EYXRhIiwiZmlsdGVyIiwia2Juel9lbnRpdHlmb3JtIiwibmV3SXRlbSIsImZpbmRXaXRoQXR0ciIsImtibnpfbmFtZSIsImVudHJpZXMiLCJpZCIsImFkZEhlbHBUZXh0IiwiaGVscHRleHRoZWFkaW5nIiwia2Juel9oZWxwdGV4dGhlYWRpbmciLCJoZWxwdGV4dCIsImtibnpfaGVscHRleHQiLCJrYm56X3BsYWNlaG9sZGVydGV4dCIsImFycmF5IiwiY29uZmlnIiwiZGVmaW5lSGVscE1vZGFsIiwiY3VzdG9tUmVFbnRlcmZpZWxkSHRtbCIsImRlZmluZUNvbmZpcm1FbWFpbEh0bWwiLCJjbG9zZXN0IiwiYWZ0ZXIiLCJjaGVja01hdGNoaW5nRW1haWxzIiwibWFrZUVtYWlsUmVhZE9ubHkiLCJzZXREaXNhYmxlIiwibWFuYWdlUGhvbmVSZXF1aXJlZCIsImlzUmVxdWlyZWQiLCJzZXRQaG9uZU51bWJlcnNSZXF1aXJlZCIsInVuZGVmaW5lZCIsImdldEluY29tZXNFZGl0IiwicXVlcnlTdHJpbmciLCJjb250YWN0SWQiLCJtYWtlSW5jb21lUmVxdWVzdCIsImdldEluY29tZXNJbnNlcnQiLCJpbmNvbWVVcmwiLCJpbmNvbWVTdW0iLCJwYXJzZUZsb2F0IiwidG9GaXhlZCIsIm1hbmFnZVNvdXJjZU9mSW5jb21lcyIsImFzc2V0SWQiLCJzdW1Bc3NldHMiLCJ0b3RhbCIsIm51bVN0cmluZyIsImlzTnVtZXJpYyIsInRvdGFsU3RyaW5nIiwibnVtYmVyV2l0aENvbW1hcyIsImlzTmFOIiwibnVtIiwic3RhdHVzTnVtIiwibWFuYWdlU3VibWl0QnV0dG9uIiwibWFuYWdlV2l0aGRyYXdCdXR0b24iLCJtYW5hZ2VBY3RpdmF0ZUJ1dHRvbiIsImJ1dHRvbiIsInNob3dHZW5lcmljRXJyb3IiLCJoYXNDbGFzcyIsImh0bWwiLCJmaWVsZF9ydWxlcyIsImZpZWxkX3J1bGUiLCJlbGVtZW50SWQiLCJrYm56X3RvZ2dsZWVsZW1lbnRpZCIsImtibnpfZWxlbWVudGlkdG9jaGFuZ2UiLCJjaGFuZ2VTZWN0aW9uVmlzaWJpbGl0eSIsImtibnpfc2hvd3doZW50b2dnbGVlbGVtZW50dmFsdWVpcyIsInRvZ2dsZVNlY3Rpb24iLCJlcnJvciIsImNvbnNvbGUiLCJzZWN0aW9uSWQiLCJjaGFuZ2VXaGVuVG9nZ2xlSXMiLCJpc1Nob3duIiwiaXNWaXNpYmxlIiwicmVtb3ZlQ2xhc3MiLCJmYWRlSW4iLCJtYW5hZ2VMb2NhdGlvblByZWZlcmVuY2VzIiwicHJpbWFyeUd1aWQiLCJsb2ciLCJzZWN0aW9uRGVzY3JpcHRpb25IdG1sIiwibm90IiwicmVtb3ZlIiwibWluRXF1aXR5IiwibWF4RXF1aXR5Iiwic2V0TnVtYmVyUmFuZ2UiLCJpc1ByaW1hcnlDb250YWN0IiwiZ2V0UHJvcGVydHkiLCJnZXRSZWxhdGlvbnNoaXBNYW5hZ2VyIiwiZ2V0Q3VycmVudFNoYXJlIiwiYWRkUGVyY2VudFNpZ24iLCJzZXRDcmVhdGVWaXNpYmxlIiwic2hvd1NoYXJlUHVyY2hhc2VUaGFua1lvdSIsInZpc2libGUiLCJ0b2dnbGUiLCJrYm56X2xpbmUxIiwia2Juel9saW5lMiIsImtibnpfY2l0eSIsImtibnpfcG9zdGFsY29kZSIsImdldFBhcmFtZXRlckJ5TmFtZSIsInNoYXJlUmVnaXN0ZXIiLCJjdXJyZW50RXF1aXR5IiwicXVlcnlTZWxlY3RvckFsbCIsImN1cnJlbnQiLCJpbm5lclRleHQiLCJocmVmIiwicmVzdWx0cyIsIlJlZ0V4cCIsImV4ZWMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJkZXRhY2giLCJhcHBlbmRUbyIsInNob3dSZXBvcnRTZWN0aW9uIiwic3RhdHVzIiwiaG9tZW93bmVyU2hhcmUiLCJzb2EiXSwibWFwcGluZ3MiOiJhQUNFLElBQUlBLEVBQW1CLEdBR3ZC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Q0FBbUMrRixXQUM1RGdTLEdBQ0wsRUFBQW5OLHVCQUF1Qm1OLEVBQUl0RyIsImZpbGUiOiJwaG8tcG9ydGFsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEwKTtcbiIsIi8qIEVtYWlsIGNvbnN0YW50cyAqL1xyXG5leHBvcnQgY29uc3QgZW1haWxGaWVsZElkID0gJ2VtYWlsYWRkcmVzczEnO1xyXG5leHBvcnQgY29uc3QgY3VzdG9tRW1haWxGaWVsZElkID0gJ2VtYWlsYWRkcmVzc2NvbmZpcm1fY3VzdG9tJztcclxuZXhwb3J0IGNvbnN0IGVtYWlsQ29uZmlybUVycm9yTWVzc2FhZ2UgPVxyXG4gICdUaGUgZW1haWwgYWRkcmVzc2VzIHlvdSBoYXZlIGVudGVyZWQgZG8gbm90IG1hdGNoLCBwbGVhc2UgdHJ5IGFnYWluLic7XHJcblxyXG4vKiBTb3VyY2VzIG9mIGluY29tZSBJRHMgKi9cclxuZXhwb3J0IGNvbnN0IGluY29tZUlkID0gJ2tibnpfaW5jb21lc291cmNldHlwZSc7XHJcbmV4cG9ydCBjb25zdCBvdGhlckluY29tZUlkID0gJ2tibnpfb3RoZXJzb3VyY2VkZXNjcmlwdGlvbic7XHJcblxyXG4vKiBQYXJhbWV0ZXIgdG8gdXNlIHRvIG9wZW4gbW9kYWwgZm9yIGFkZCBleGlzdGluZyBjb250YWN0ICovXHJcbmV4cG9ydCBjb25zdCBhZGRFeGlzdGluZ1BhcmFtID0gJ2FkZEV4aXN0aW5nJztcclxuXHJcbi8qIEV0aG5pY2l0eSBmaWVsZHMgKi9cclxuZXhwb3J0IGNvbnN0IGV0aG5pY2l0eUlkcyA9IFtcclxuICAna2Juel9ldGhuaWNpdHknLFxyXG4gICdrYm56X2V0aG5pY2l0eTInLFxyXG4gICdrYm56X2V0aG5pY2l0eTMnLFxyXG5dO1xyXG5cclxuLyogQ29udGFjdCBiaXJ0aGRhdGUgZmllbGQgSUQgKi9cclxuZXhwb3J0IGNvbnN0IGJpcnRoZGF0ZUlkID0gJ2JpcnRoZGF0ZSc7XHJcbiIsIi8qKlxyXG4gKiBQYWdlIHR5cGVzLlxyXG4gKiBOQjogVGhpcyBpcyBoYXJkIGNvZGVkIG9uIHRoZSBlbnRpdHkvIHdlYiBmb3Jtcy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBwYWdlVHlwZSA9IHtcclxuICBBUFBMSUNBVElPTl9ERVRBSUxTOiAncGhvYXBwbGljYXRpb25kZXRhaWxzJyxcclxuICBBRERJVElPTkFMX0FQUExJQ0FOVDogJ3Bob2FkZGl0aW9uYWxhcHBsaWNhbnQnLFxyXG4gIEVMSUdJQklMSVRZOiAncGhvZWxpZ2liaWxpdHknLFxyXG4gIFNPVVJDRU9GSU5DT01FOiAnc291cmNlLW9mLWluY29tZScsXHJcbiAgUFJPRklMRTogJ3Byb2ZpbGUnLFxyXG4gIERFUEVOREVOVDogJ2RlcGVuZGVudCcsXHJcbiAgU0hBUkVfVFJBTlNBQ1RJT046ICdzaGFyZS10cmFuc2FjdGlvbicsXHJcbiAgU0hBUkVEX09XTkVSU0hJUDogJ3NoYXJlZC1vd25lcnNoaXAnLFxyXG4gIERBU0hCT0FSRDogJ2Rhc2hib2FyZCcsXHJcbiAgQ09OVEFDVF9VUzogJ2NvbnRhY3QtdXMnLFxyXG4gIE1ZX1JFUVVFU1RTOiAnbXktcmVxdWVzdHMnLFxyXG4gIEdPQUxTX01BTkFHRU1FTlQ6ICdnb2Fscy1tYW5hZ2VtZW50JyxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb250YWN0IHR5cGVzLlxyXG4gKiBOQjogVGhpcyBpcyBoYXJkIGNvZGVkIG9uIHRoZSBlbnRpdHkvIHdlYiBmb3Jtcy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBjb250YWN0VHlwZSA9IHtcclxuICBQUklNQVJZOiAncHJpbWFyeScsXHJcbiAgQURESVRJT05BTDogJ2FkZGl0aW9uYWwnLFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN0ZXAgdHlwZXMgaW4gZm9ybXMuXHJcbiAqIE5COiBUaGlzIGlzIGhhcmQgY29kZWQgb24gdGhlIGVudGl0eS8gd2ViIGZvcm1zLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHN0ZXBUeXBlID0ge1xyXG4gIEE6ICdBJyxcclxuICBCOiAnQicsXHJcbiAgQzogJ0MnLFxyXG59O1xyXG5cclxuLyogUGhvbmUgY29uc3RhbnRzICovXHJcbmV4cG9ydCBjb25zdCBwaG9uZUZpZWxkSWRzID0gWyd0ZWxlcGhvbmUyJywgJ21vYmlsZXBob25lJ107XHJcblxyXG4vKiogRmllbGRzIGZvciBhc3NldHM6IGFwcGxpY2F0aW9uIHN0ZXAgQiBmb3IgcHJpbWFyeSBjb250YWN0ICovXHJcbmV4cG9ydCBjb25zdCBhc3NldEZpZWxkSWRzID0gW1xyXG4gICdrYm56X21vbmV5aW5iYW5rYWNjb3VudHMnLFxyXG4gICdrYm56X3NoYXJlc3N0b2Nrc2FuZGJvbmRzJyxcclxuICAna2Juel9idWlsZGluZ3NvY2lldHlzaGFyZXMnLFxyXG4gICdrYm56X2JvYXRvcmNhcmF2YW4nLFxyXG4gICdrYm56X2ludmVzdG1lbnRzaW5iYW5rcycsXHJcbiAgJ2tibnpfb3RoZXJ2ZWhpY2xlcycsXHJcbiAgJ2tibnpfYW55b3RoZXJpbmRpdmlkdWFsYXNzZXRzJyxcclxuXTtcclxuXHJcbi8qKiBTdGF0dXNlcyBvZiBQSE8gYXBwbGljYXRpb25zIGFuZCByZXNwZWN0aXZlIElEcyAqL1xyXG5leHBvcnQgY29uc3QgYXBwbGljYXRpb25TdGF0ZXMgPSB7XHJcbiAgYWxsb2NhdGVkOiAnOTczNzcwMDAxJyxcclxuICBhcHByb3ZlZDogJzk3Mzc3MDAwNScsXHJcbiAgYXBwcm92ZWRJbmFjdGl2ZTogJzk3Mzc3MDAwOScsXHJcbiAgZGVjbGluZWQ6ICc5NzM3NzAwMDYnLFxyXG4gIGRyYWZ0OiAnMScsXHJcbiAgZWxpZ2libGU6ICc5NzM3NzAwMDQnLFxyXG4gIGV4cGlyZWQ6ICc5NzM3NzAwMDgnLFxyXG4gIGluYWN0aXZlOiAnMicsXHJcbiAgbW9yZUluZm86ICc5NzM3NzAwMDInLFxyXG4gIHJlc3VibWl0dGVkOiAnOTczNzcwMDAzJyxcclxuICBzdWJtaXR0ZWQ6ICc5NzM3NzAwMDAnLFxyXG4gIHdpdGhkcmF3bjogJzk3Mzc3MDAwNycsXHJcbn07XHJcblxyXG4vKiogVVJMIHRvIGdldCB0aGUgZmllbGQgcnVsZXMgZm9yIHNob3cvIGhpZGUgc2VjdGlvbnMgKi9cclxuZXhwb3J0IGNvbnN0IGZpZWxkUnVsZXNVcmwgPSAnL19vZGF0YS9rYm56X2ZpZWxkcnVsZXMnO1xyXG5cclxuLyoqIElEcyBmb3IgbG9jYXRpb24gcHJlZmVyZW5jZSBkcm9wZG93bnMgKi9cclxuZXhwb3J0IGNvbnN0IGxvY2F0aW9uUHJlZmVyZW5jZUlkcyA9IFtcclxuICAna2Juel9wcmltYXJ5bG9jYXRpb24nLFxyXG4gICdrYm56X3NlY29uZGFyeWxvY2F0aW9uJyxcclxuXTtcclxuXHJcbi8qKiBJRHMgZm9yIGxvY2F0aW9ucyAqL1xyXG5leHBvcnQgY29uc3QgbG9jYXRpb25JZHMgPSB7XHJcbiAgQVVDS0xBTkQ6ICcyYjFjMTFhYS04Mjg2LWU5MTEtYTk3ZS0wMDBkM2FlMTMyNjAnLFxyXG4gIEJBWV9PRl9QTEVOVFk6ICcwZjFjMTFhYS04Mjg2LWU5MTEtYTk3ZS0wMDBkM2FlMTMyNjAnLFxyXG4gIENBTlRFUkJVUlk6ICcyMTFjMTFhYS04Mjg2LWU5MTEtYTk3ZS0wMDBkM2FlMTMyNjAnLFxyXG4gIEdJU0JPUk5FOiAnMTExYzExYWEtODI4Ni1lOTExLWE5N2UtMDAwZDNhZTEzMjYwJyxcclxuICBIQVdLRVNfQkFZOiAnMTMxYzExYWEtODI4Ni1lOTExLWE5N2UtMDAwZDNhZTEzMjYwJyxcclxuICBNQU5BV0FUVV9XQU5HQU5VSTogJzE3MWMxMWFhLTgyODYtZTkxMS1hOTdlLTAwMGQzYWUxMzI2MCcsXHJcbiAgTUFSTEJPUk9VR0g6ICcxZjFjMTFhYS04Mjg2LWU5MTEtYTk3ZS0wMDBkM2FlMTMyNjAnLFxyXG4gIE5FTFNPTjogJzFkMWMxMWFhLTgyODYtZTkxMS1hOTdlLTAwMGQzYWUxMzI2MCcsXHJcbiAgTk9SVEhMQU5EOiAnMGIxYzExYWEtODI4Ni1lOTExLWE5N2UtMDAwZDNhZTEzMjYwJyxcclxuICBTT1VUSExBTkQ6ICcyOTFjMTFhYS04Mjg2LWU5MTEtYTk3ZS0wMDBkM2FlMTMyNjAnLFxyXG4gIE9UQUdPOiAnMjcxYzExYWEtODI4Ni1lOTExLWE5N2UtMDAwZDNhZTEzMjYwJyxcclxuICBUQVJBTkFLSTogJzE1MWMxMWFhLTgyODYtZTkxMS1hOTdlLTAwMGQzYWUxMzI2MCcsXHJcbiAgVEFTTUFOOiAnMWIxYzExYWEtODI4Ni1lOTExLWE5N2UtMDAwZDNhZTEzMjYwJyxcclxuICBXQUlLQVRPOiAnMGQxYzExYWEtODI4Ni1lOTExLWE5N2UtMDAwZDNhZTEzMjYwJyxcclxuICBXRUxMSU5HVE9OOiAnMTkxYzExYWEtODI4Ni1lOTExLWE5N2UtMDAwZDNhZTEzMjYwJyxcclxuICBXRVNUX0NPQVNUOiAnMjMxYzExYWEtODI4Ni1lOTExLWE5N2UtMDAwZDNhZTEzMjYwJyxcclxufTtcclxuXHJcbi8qKiBGaWxlIHVwbG9hZCBwcmVmaXggKi9cclxuZXhwb3J0IGNvbnN0IGZpbGVQcmVmaXggPSAnVXBsb2FkZWQgdG8gRkhQOiAnO1xyXG5cclxuIiwiaW1wb3J0IHsgZXRobmljaXR5SWRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5cclxuLyoqXHJcbiAqIEJpbmQgb24gY2hhbmdlIGZ1bmN0aW9uIGZvciB3aGVuICdPdGhlcicgRXRobmljaXR5IGlzIHNlbGVjdGVkLFxyXG4gKiBzaG93IHJlcXVpcmVkIGlucHV0IGZpZWxkIHRvIGVudGVyIGV0aG5pY2l0eS5cclxuICovXHJcbmV4cG9ydCBjb25zdCBtYW5hZ2VFdGhuaWNpdHkgPSAoKTogdm9pZCA9PiB7XHJcbiAgWHJtLlBvcnRhbC5Gb3JtLmdldCgna2Juel9ldGhuaWNpdHlvdGhlcicpLnNldFZpc2libGUoZmFsc2UpO1xyXG4gIGZvciAobGV0IGVsZW1lbnQgb2YgZXRobmljaXR5SWRzKSB7XHJcbiAgICBYcm0uUG9ydGFsLkZvcm0uZ2V0KGVsZW1lbnQpLmF0dGFjaE9uQ2hhbmdlKG1hbmFnZU11bHRpcGxlRXRobmljaXRpZXMpO1xyXG4gIH1cclxuICBtYW5hZ2VNdWx0aXBsZUV0aG5pY2l0aWVzKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogSWYgJ090aGVyJyBFdGhuaWNpdHkgaXMgc2VsZWN0ZWQsIHNob3cgcmVxdWlyZWQgaW5wdXQgZmllbGQgdG8gZW50ZXIgZXRobmljaXR5LlxyXG4gKi9cclxuY29uc3QgdG9nZ2xlRXRobmljaXR5T3RoZXIgPSAoc2hvd090aGVyOiBib29sZWFuKTogdm9pZCA9PiB7XHJcbiAgWHJtLlBvcnRhbC5Gb3JtLmdldCgna2Juel9ldGhuaWNpdHlvdGhlcicpLnNldFZpc2libGUoc2hvd090aGVyKTtcclxuICBYcm0uUG9ydGFsLkZvcm0uZ2V0KCdrYm56X2V0aG5pY2l0eW90aGVyJykuc2V0UmVxdWlyZWQoc2hvd090aGVyKTtcclxuICBpZiAoIXNob3dPdGhlcikge1xyXG4gICAgWHJtLlBvcnRhbC5Gb3JtLmdldCgna2Juel9ldGhuaWNpdHlvdGhlcicpLnNldFZhbHVlKCcnKTsgLy8gQ2xlYXIgdmFsdWVcclxuICB9XHJcbn07XHJcblxyXG4vKipcclxuICogTWFuYWdlcyBtdWx0aXBsZSAoMykgZXRobmljaXR5IGZpZWxkcy5cclxuICogV2hlbiBhbiBldGhuaWNpdHkgaXMgc2VsZWN0ZWQsIHRoaXMgb3B0aW9uIGlzIHJlbW92ZWQgZnJvbSB0aGUgb3RoZXIgZmllbGRzLlxyXG4gKi9cclxuY29uc3QgbWFuYWdlTXVsdGlwbGVFdGhuaWNpdGllcyA9ICgpOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IGV0aG5pY2l0eU90aGVySWQ6IHN0cmluZyA9ICc5JztcclxuICAgIGNvbnN0IE1heE51bUl0ZW1zOiBudW1iZXIgPSAxMztcclxuXHJcblxyXG4gIC8vIE5lZWQgdG8gYWRkIGJhY2sgYWxsIHRoZSBvcHRpb25zIGF0IHN0YXJ0XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBNYXhOdW1JdGVtczsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGkgIT0gMTEpIHsgLy9pdGVtIDExIGRvZXMgbm90IGV4aXN0LCBza2lwIHRoaXMgbnVtYmVyXHJcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZXRobmljaXR5SWRzKSB7XHJcbiAgICAgICAgICAgICAgICAkKGAjJHtlbGVtZW50fSBvcHRpb25bdmFsdWU9JyR7aX0nXWApLnNob3coKTtcclxuICAgICAgICAgICAgICAgICQoYCMke2VsZW1lbnR9IG9wdGlvblt2YWx1ZT0nJHtpfSddYCkucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcbiAgbGV0IHZhbHVlcyA9IFtdO1xyXG4gIGZvciAobGV0IGVsZW1lbnQgb2YgZXRobmljaXR5SWRzKSB7XHJcbiAgICB2YWx1ZXMucHVzaChYcm0uUG9ydGFsLkZvcm0uZ2V0KGVsZW1lbnQpLmdldFZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgbGV0IHNob3dPdGhlciA9IGZhbHNlO1xyXG4gIGlmICh2YWx1ZXMuaW5jbHVkZXMoZXRobmljaXR5T3RoZXJJZCkpIHtcclxuICAgIHNob3dPdGhlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XHJcbiAgICBpZiAodmFsdWUgIT09ICcnKSB7XHJcbiAgICAgIGV0aG5pY2l0eUlkcy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleDIpIHtcclxuICAgICAgICBpZiAoaW5kZXggIT09IGluZGV4Mikge1xyXG4gICAgICAgICAgLy8gTm90IGdvaW5nIHRvIGhpZGUgaXRlbSBpbiBvd24gZHJvcGRvd25cclxuICAgICAgICAgICQoYCMke2VsZW1lbnR9IG9wdGlvblt2YWx1ZT0nJHt2YWx1ZX0nXWApLmhpZGUoKTtcclxuICAgICAgICAgICQoYCMke2VsZW1lbnR9IG9wdGlvblt2YWx1ZT0nJHt2YWx1ZX0nXWApLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9KTtcclxuICB0b2dnbGVFdGhuaWNpdHlPdGhlcihzaG93T3RoZXIpO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBlbWFpbEZpZWxkSWQgfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcblxyXG5pbnRlcmZhY2UgQ29udGFjdEFzc29jaWF0ZUpzb24ge1xyXG4gIGNvdW50OiBudW1iZXI7XHJcbiAgY29udGFjdGlkOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYW5hZ2UgdXNlciBzdG9yeSBvZiBhZGRpbmcvIGVkaXRpbmcgYSBjb250YWN0IHRvIGhhdmUgYW4gZW1haWwgdGhhdCBhbHJlYWR5IGV4aXN0c1xyXG4gKiBBTkQgdGhhdCB0aGV5IGFyZSBhc3NvY2lhdGVkIHRvLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG1hbmFnZUV4aXN0aW5nQWRkaXRpb25hbCA9IChcclxuICBwYXJ0aWFsUmVkaXJlY3RVcmw6IHN0cmluZyxcclxuICBxdWVyeVBhcmFtOiBzdHJpbmdcclxuKTogdm9pZCA9PiB7XHJcbiAgJChgIyR7ZW1haWxGaWVsZElkfWApLm9uKCdjaGFuZ2UnLCBjaGVja0R1cGxpY2F0ZUVtYWlsKTtcclxuXHJcbiAgLy8gYWRkIHRvIGRvY3VtZW50IGh0bWwgYW5kIGhpZGVcclxuICAkKGAjJHtlbWFpbEZpZWxkSWR9X2xhYmVsYClcclxuICAgIC5wYXJlbnQoKVxyXG4gICAgLmFwcGVuZChcclxuICAgICAgYDxkaXYgY2xhc3M9XCIke2VtYWlsRmllbGRJZH0tbW9kYWxcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjJHtlbWFpbEZpZWxkSWR9LW1vZGFsXCI+PC9kaXY+YCxcclxuICAgICAgZGVmaW5lQXNzb2NpYXRlTW9kYWwoZW1haWxGaWVsZElkLCBwYXJ0aWFsUmVkaXJlY3RVcmwsIHF1ZXJ5UGFyYW0pXHJcbiAgICApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIHVzZXIgaXMgdHJ5aW5nIHRvIGVudGVyIGEgQ29udGFjdCB0aGV5IGFyZSBhbHJlYWR5IGFzc29jaWF0ZWQgdG9cclxuICovXHJcbmNvbnN0IGNoZWNrRHVwbGljYXRlRW1haWwgPSAoKTogdm9pZCA9PiB7XHJcbiAgY29uc3QgZW1haWxDaGVja1VybCA9IGVuY29kZVVSSShcclxuICAgIGB+L2FwaS1jb250YWN0Lz9lbWFpbD0ke1hybS5Qb3J0YWwuRm9ybS5nZXQoZW1haWxGaWVsZElkKS5nZXRWYWx1ZSgpfWBcclxuICApO1xyXG5cclxuICAkLmFqYXgoe1xyXG4gICAgdXJsOiBlbWFpbENoZWNrVXJsLFxyXG4gIH0pLmRvbmUoZnVuY3Rpb24gKGRhdGE6IENvbnRhY3RBc3NvY2lhdGVKc29uKSB7XHJcbiAgICBpZiAoZGF0YS5jb3VudCA+IDApIHtcclxuICAgICAgLy8gQXNzb2NpYXRlZCB1c2VyIGV4aXN0cywgZ2l2ZSBhbGVydFxyXG4gICAgICAvLyBzaG93IG1vZGFsXHJcbiAgICAgICQoYCMke2VtYWlsRmllbGRJZH0tbW9kYWxgKS5tb2RhbCgnc2hvdycpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIERlZmluZXMgSFRNTCBvZiBtb2RhbCB0byB3YXJuIHVzZXIgdGhleSBhcmUgYXR0ZW1wdGluZyB0byBhZGQgYSBDb250YWN0IHRoZXkgYXJlIGFscmVhZHkgYXNzb2NpYXRlZCB0by5cclxuICogQHBhcmFtIGZpZWxkIEZpZWxkIG5hbWUgbW9kYWwgaXMgYXNzb2NpYXRlZCB3aXRoLlxyXG4gKiBAcmV0dXJucyBIVE1MIHJlcHJlc2VudGF0aW9uIG9mIG1vZGFsLlxyXG4gKi9cclxuY29uc3QgZGVmaW5lQXNzb2NpYXRlTW9kYWwgPSAoXHJcbiAgZmllbGQ6IHN0cmluZyxcclxuICBwYXJ0aWFsUmVkaXJlY3RVcmw6IHN0cmluZyxcclxuICBxdWVyeVBhcmFtOiBzdHJpbmdcclxuKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBtb2RhbFRpdGxlOiBzdHJpbmcgPSAnV2FybmluZyc7XHJcbiAgY29uc3QgbW9kYWxCb2R5OiBzdHJpbmcgPSBgPHA+VGhlIHVzZXIgeW91IGFyZSBhdHRlbXB0aW5nIHRvIGFkZCBhbHJlYWR5IGV4aXN0cy48L3A+XHJcbiAgPHA+UGxlYXNlIGFzc29jaWF0ZSB0aGlzIGNvbnRhY3QgdG8geW91ciBhcHBsaWNhdGlvbiB1c2luZyB0aGUgJ0FkZCBleGlzdGluZyBhcHBsaWNhbnRzJyBidXR0b24gb24gdGhlIGFwcGxpY2F0aW9uIHBhZ2UuPC9wPmA7XHJcbiAgY29uc3QgYnV0dG9uSHJlZjogc3RyaW5nID0gYC8ke3BhcnRpYWxSZWRpcmVjdFVybH0vPyR7cXVlcnlQYXJhbX1gO1xyXG4gIGNvbnN0IGJ1dHRvbkxhYmVsOiBzdHJpbmcgPSAnR28gdG8gYXBwbGljYXRpb24gcGFnZSc7XHJcblxyXG4gIHJldHVybiBgXHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJtb2RhbCBmYWRlXCJcclxuICAgIGlkPVwiJHtmaWVsZH0tbW9kYWxcIlxyXG4gICAgdGFiaW5kZXg9XCItMVwiXHJcbiAgICByb2xlPVwiZGlhbG9nXCJcclxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiY2xvc2VcIlxyXG4gICAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgICZ0aW1lcztcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIiR7ZmllbGR9LW1vZGFsLWxhYmVsXCI+JHttb2RhbFRpdGxlfTwvaDQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICR7bW9kYWxCb2R5fVxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgIGlkPVwiJHtmaWVsZH0tYXNzb2NpYXRlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmdcIlxyXG4gICAgICAgICAgICAgIGhyZWY9XCIke2J1dHRvbkhyZWZ9XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICR7YnV0dG9uTGFiZWx9XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PmA7XHJcbn07XHJcbiIsIi8qKiBNYW5hZ2VzIGF0dGFjaG1lbnQgcHJlZml4ZXMgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyAqL1xyXG5leHBvcnQgY29uc3QgbWFuYWdlQXR0YWNobWVudHMgPSAoZmlsZW5hbWVQcmVmaXg/OiBzdHJpbmcpID0+IHtcclxuICBpZiAoZmlsZW5hbWVQcmVmaXgpIHtcclxuICAgIHByZWZpeEF0dGFjaG1lbnROb3RlKGZpbGVuYW1lUHJlZml4KTtcclxuICB9XHJcbiAgcHJldmVudFNwZWNpYWxDaGFyYWN0ZXJzKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUHJlZml4ZXMgbm90ZXMgd2l0aCBcIlVwbG9hZGVkIHRvIFtwb3J0YWwgbmFtZV1cIlxyXG4gKi9cclxuY29uc3QgcHJlZml4QXR0YWNobWVudE5vdGUgPSAocHJlZml4OiBzdHJpbmcpOiB2b2lkID0+IHtcclxuICBjb25zdCBub3RlQ29udHJvbCA9ICd0ZXh0YXJlYVthcmlhLWxhYmVsPVwiTm90ZVwiXSc7XHJcbiAgJChub3RlQ29udHJvbCkub24oJ2ZvY3VzaW4nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBsZXQgbm90ZSA9ICQobm90ZUNvbnRyb2wpLnZhbCgpIGFzIHN0cmluZztcclxuICAgIG5vdGUgPSBub3RlLnJlcGxhY2UocHJlZml4LCAnJyk7XHJcbiAgICAkKG5vdGVDb250cm9sKS52YWwoYCR7bm90ZX1gKTtcclxuICB9KTtcclxuICAkKG5vdGVDb250cm9sKS5vbignZm9jdXNvdXQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBsZXQgbm90ZSA9ICQobm90ZUNvbnRyb2wpLnZhbCgpIGFzIHN0cmluZztcclxuICAgIGlmIChub3RlKSAkKG5vdGVDb250cm9sKS52YWwoYCR7cHJlZml4fSR7bm90ZX1gKTtcclxuICB9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQcmV2ZW50cyBzcGVjaWFsIGNoYXJhY3RlcnMgZnJvbSBiZWluZyB1c2VkIGluIGZpbGVuYW1lcy5cclxuICogSWYgdXNlZCwgZ2l2ZXMgZXJyb3IgbWVzc2FnZSBhbmQgcmVtb3ZlcyB0aGUgZmlsZS5cclxuICovXHJcbmNvbnN0IHByZXZlbnRTcGVjaWFsQ2hhcmFjdGVycyA9ICgpID0+IHtcclxuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgUGxlYXNlIGNoYW5nZSB5b3VyIGZpbGVuYW1lLiBXZSBkbyBub3QgYWxsb3cgZmlsZW5hbWVzIHdpdGggdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiAvLCBcXCwgPywgJSwgKiwgOiwgfCwgXCIsIDwsID5gO1xyXG4gIGNvbnN0IGVycm9yU2VsZWN0b3IgPSAkKCcubW9kYWwtYm9keScpXHJcbiAgICAuY2hpbGRyZW4oJy5hZGRub3RlJylcclxuICAgIC5zaWJsaW5ncygnLmVycm9yJyk7XHJcblxyXG4gICQoJ2lucHV0W3R5cGU9XCJmaWxlXCJdJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICQoJyNjdXN0b20tZmlsZW5hbWUtZXJyb3InKS5oaWRlKCk7XHJcbiAgICBjb25zdCBzdHIgPSAodGhpcyBhcyBhbnkpLnZhbHVlO1xyXG4gICAgY29uc3QgbiA9IHN0ci5sYXN0SW5kZXhPZignXFxcXCcpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gc3RyLnN1YnN0cmluZyhuICsgMSk7XHJcblxyXG4gICAgaWYgKGhhc1NwZWNpYWxDaGFyYWN0ZXJzKHJlc3VsdCkpIHtcclxuICAgICAgJCgnaW5wdXRbdHlwZT1cImZpbGVcIl0nKS52YWwobnVsbCk7XHJcbiAgICAgIGlmIChlcnJvclNlbGVjdG9yLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBlcnJvclNlbGVjdG9yLnRleHQoZXJyb3JNZXNzYWdlKS5zaG93KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgaHRtbEVycm9yID0gbWFrZUVycm9yRGl2KGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgJCgnLm1vZGFsLWJvZHknKS5maW5kKCcuYWRkbm90ZScpLnByZXBlbmQoaHRtbEVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRydWUgaWYgdGhlIHN0cmluZyBoYXMgYSBzcGVjaWFsIGNoYXJhY3RlciAoLywgXFwsID8sICUsICosIDosIHwsIFwiLCA8LCA+KSBpbiBpdC5cclxuICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIHRlc3QuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgYSBzcGVjaWFsIGNoYXJhY3RlciBpcyBwcmVzZW50LlxyXG4gKi9cclxuY29uc3QgaGFzU3BlY2lhbENoYXJhY3RlcnMgPSAoc3RyOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gc3RyLm1hdGNoKC9bXFwvXFxcXD8lKjp8XCI8PnxdLykgPyB0cnVlIDogZmFsc2U7XHJcbn07XHJcblxyXG4vKipcclxuICogRGVmaW5lcyBIVE1MIGZvciBhbiBlcnJvciBtZXNzYWdlIGluIGEgbW9kYWwuXHJcbiAqIEBwYXJhbSBlcnJvck1lc3NhZ2UgVGhlIHRleHQgZm9yIHRoZSBlcnJvci5cclxuICogQHJldHVybnMgSFRNTCBmb3IgYW4gZXJyb3IgbWVzc2FnZS5cclxuICovXHJcbmNvbnN0IG1ha2VFcnJvckRpdiA9IChlcnJvck1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBgXHJcbiAgPGRpdiBpZD1cImN1c3RvbS1maWxlbmFtZS1lcnJvclwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtYmxvY2sgYWxlcnQtZGFuZ2VyIGVycm9yIGNsZWFyZml4XCIgdGFiaW5kZXg9XCIwXCI+XHJcbiAgICAke2Vycm9yTWVzc2FnZX1cclxuICA8L2Rpdj5cclxuICBgO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBiaXJ0aGRhdGVJZCB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuXHJcbi8qKiBEZW55IGZ1dHVyZSBiaXJ0aGRhdGVzICovXHJcbmV4cG9ydCBjb25zdCBtYW5hZ2VCaXJ0aGRhdGUgPSAoKSA9PiB7XHJcbiAgZGVueUZ1dHVyZUJpcnRoZGF0ZShiaXJ0aGRhdGVJZCk7XHJcbn07XHJcblxyXG4vKiogRGVueSBmdXR1cmUgYmlydGhkYXRlICovXHJcbmNvbnN0IGRlbnlGdXR1cmVCaXJ0aGRhdGUgPSAoZmllbGRJZDogc3RyaW5nKSA9PiB7XHJcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gJ0RhdGUgb2YgYmlydGggY2Fubm90IGJlIGEgZnV0dXJlIGRhdGUuJztcclxuICBYcm0uUG9ydGFsLkZvcm0uVmFsaWRhdGlvbi5kZW55RnV0dXJlRGF0ZShmaWVsZElkLCBlcnJvck1lc3NhZ2UpO1xyXG59O1xyXG4iLCIvKipcclxuICogQWRkcyBhIGJ1dHRvbiB0byBhIHNlY3Rpb24uXHJcbiAqIEBwYXJhbSBzZWN0aW9uVGl0bGUgVGhlIHRpdGxlIG9mIHRoZSBzZWN0aW9uIHRvIGFkZCB0aGUgYnV0dG9uIHRvLlxyXG4gKiBAcGFyYW0gYnV0dG9uSWQgVGhlIGlkIG9mIHRoZSBidXR0b24uXHJcbiAqIEBwYXJhbSBidXR0b25MYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGJ1dHRvbi5cclxuICovXHJcbmV4cG9ydCBjb25zdCBhZGRCdXR0b25Ub1NlY3Rpb24gPSAoXHJcbiAgc2VjdGlvblRpdGxlOiBzdHJpbmcsXHJcbiAgYnV0dG9uSWQ6IHN0cmluZyxcclxuICBidXR0b25MYWJlbDogc3RyaW5nXHJcbik6IHZvaWQgPT4ge1xyXG4gIGNvbnN0IHNlY3Rpb25zOiBKUXVlcnk8SFRNTEVsZW1lbnQ+ID0gJCgnbGVnZW5kLnNlY3Rpb24tdGl0bGUnKTtcclxuXHJcbiAgbGV0IHNlY3Rpb246IGFueTtcclxuICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGlmIChzZWN0aW9uc1tpXS5pbm5lckhUTUwudG9Mb3dlckNhc2UoKSA9PSBgJHtzZWN0aW9uVGl0bGV9YCkge1xyXG4gICAgICBzZWN0aW9uID0gc2VjdGlvbnNbaV07XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAoc2VjdGlvbikge1xyXG4gICAgJChzZWN0aW9uKS5hcHBlbmQoXHJcbiAgICAgIGA8aW5wdXQgdHlwZT0nYnV0dG9uJyBpZD0nJHtidXR0b25JZH0nIGNsYXNzPSdzdWJtaXQtYnRuIGJ0biBidG4tcHJpbWFyeSBwdWxsLXJpZ2h0JyB2YWx1ZT0nJHtidXR0b25MYWJlbH0nIC8+YFxyXG4gICAgKTtcclxuICB9XHJcbn07XHJcbiIsImV4cG9ydCBjb25zdCBpbml0WHJtUG9ydGFsID0gKG9uTG9hZDogKCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgc2NyaXB0LnNyYyA9ICcveHJtcG9ydGFsc2NyaXB0LmpzJztcclxuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XHJcbiAgICBzY3JpcHQub25sb2FkID0gb25Mb2FkO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG59OyIsImV4cG9ydCBjb25zdCBzZXRSZWxhdGlvbnNoaXBNYW5hZ2VyID0gKHNvYUlkKSA9PiB7XHJcbiAgICAkLmdldChgL19vZGF0YS9rYm56X3NoYXJlZG93bmVyc2hpcGFncmVlbWVudHM/JGZpbHRlcj1rYm56X3NoYXJlZG93bmVyc2hpcGFncmVlbWVudGlkJTIwZXElMjBndWlkJTI3JHtzb2FJZH0lMjdgLCBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudmFsdWUgJiYgcmVzdWx0LnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSByZXN1bHQudmFsdWVbMF07XHJcbiAgICAgICAgICAgIGlmIChkYXRhLm93bmVyaWQgJiYgZGF0YS5vd25lcmlkLk5hbWUpXHJcbiAgICAgICAgICAgICAgICAkKCcja29fcmVsYXRpb25zaGlwbWFuYWdlcicpLnRleHQoZGF0YS5vd25lcmlkLk5hbWUpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RXF1aXR5QW1vdW50ID0gKHNoYXJlUmVnaXN0ZXJJZCwgc3VjY2VzczogKGVxdWl0eSwgcHJvcGVydHlWYWx1ZSkgPT4gdm9pZCkgPT4ge1xyXG4gICAgJC5nZXQoYC9fb2RhdGEva2Juel9zaGFyZXJlZ2lzdGVycz8kZmlsdGVyPWtibnpfc2hhcmVyZWdpc3RlcmlkJTIwZXElMjBndWlkJTI3JHtzaGFyZVJlZ2lzdGVySWR9JTI3YCwgZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gcmVzdWx0LnZhbHVlWzBdO1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVxdWl0eSA9IGRhdGEua2Juel9lcXVpdHlhbW91bnQgPz8gMDtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eVZhbHVlID0gZGF0YS5rYm56X3Byb3BlcnR5dmFsdWUgPz8gMDtcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MoZXF1aXR5LCBwcm9wZXJ0eVZhbHVlKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG4gICAgfSlcclxufSIsImltcG9ydCB7XHJcbiAgYWRkQ29weUFkZHJlc3NCdXR0b24sXHJcbiAgZG93bmxvYWRBZGRyZXNzRmluZGVyLFxyXG59IGZyb20gXCIuLi8uLi9jb21tb24vYWRkcmVzc1wiO1xyXG5pbXBvcnQgeyBhZGRFeGlzdGluZ1BhcmFtIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHtcclxuICBwYWdlVHlwZSxcclxuICBzdGVwVHlwZSxcclxuICBjb250YWN0VHlwZSxcclxuICBwaG9uZUZpZWxkSWRzLFxyXG4gIGZpbGVQcmVmaXgsXHJcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGxvYWRIZWxwVGV4dCB9IGZyb20gXCIuLi8uLi9jb21tb24vaGVscC10ZXh0XCI7XHJcbmltcG9ydCB7IG1hbmFnZUV0aG5pY2l0eSB9IGZyb20gXCIuLi8uLi9jb21tb24vZXRobmljaXR5XCI7XHJcbmltcG9ydCB7XHJcbiAgYWRkRW1haWxDb25maXJtYXRpb25GaWVsZCxcclxuICBtYWtlRW1haWxSZWFkT25seSxcclxufSBmcm9tIFwiLi4vLi4vY29tbW9uL2VtYWlsXCI7XHJcbmltcG9ydCB7IG1hbmFnZVBob25lTnVtYmVycyB9IGZyb20gXCIuLi8uLi9jb21tb24vcGhvbmVcIjtcclxuaW1wb3J0IHsgYWRkUHJpdmFjeVN0YXRlbWVudEJ1dHRvbiB9IGZyb20gXCIuLi8uLi9jb21tb24vcHJpdmFjeS1zdGF0ZW1lbnRcIjtcclxuaW1wb3J0IHsgc2V0U3RhdHV0b3J5TGFiZWwgfSBmcm9tIFwiLi9zdGF0dXRvcnktZGVjbGFyYXRpb25cIjtcclxuaW1wb3J0IHtcclxuICBpbml0U291cmNlT2ZJbmNvbWUsXHJcbiAgbWFuYWdlRWRpdEluY29tZSxcclxuICBtYW5hZ2VJbnNlcnRJbmNvbWUsXHJcbn0gZnJvbSBcIi4uLy4uL2NvbW1vbi9pbmNvbWVcIjtcclxuaW1wb3J0IHsgbWFuYWdlQXNzZXRUb3RhbCB9IGZyb20gXCIuL2Fzc2V0c1wiO1xyXG5pbXBvcnQgeyBtYW5hZ2VFeGlzdGluZ0FkZGl0aW9uYWwgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2FkZGl0aW9uYWwtYXBwbGljYW50XCI7XHJcbmltcG9ydCB7IG1hbmFnZVVzZUV4aXN0aW5nRG9jdW1lbnRzIH0gZnJvbSBcIi4va2Juei1kb2N1bWVudHNcIjtcclxuaW1wb3J0IHsgbWFuYWdlQXBwbGljYXRpb25CdXR0b25zIH0gZnJvbSBcIi4vbWFuYWdlLWFwcGxpY2F0aW9uLWJ1dHRvbnNcIjtcclxuaW1wb3J0IHsgbWFuYWdlRXJyb3JzIH0gZnJvbSBcIi4vbWFuYWdlLWVycm9yc1wiO1xyXG5pbXBvcnQgeyBtYW5hZ2VBdHRhY2htZW50cyB9IGZyb20gXCIuLi8uLi9jb21tb24vYXR0YWNobWVudFwiO1xyXG5pbXBvcnQgeyBtYW5hZ2VTZWN0aW9uVmlzaWJpbGl0eSB9IGZyb20gXCIuL3NlY3Rpb25zXCI7XHJcbmltcG9ydCB7IHJlbmRlclBhZ2UgfSBmcm9tIFwiLi4vLi4vY29tbW9uL3JlbmRlci1wYWdlXCI7XHJcbmltcG9ydCB7IG1hbmFnZUxvY2F0aW9ucyB9IGZyb20gXCIuL2xvY2F0aW9uLXByZWZlcmVuY2VcIjtcclxuaW1wb3J0IHsgZGlzYWJsZVJlbW92ZVByaW1hcnlDb250YWN0IH0gZnJvbSBcIi4vZGlzYWJsZS1yZW1vdmUtcHJpbWFyeVwiO1xyXG5pbXBvcnQgeyBtYW5hZ2VCaXJ0aGRhdGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2JpcnRoZGF0ZVwiO1xyXG5pbXBvcnQgeyBtYW5hZ2VEZXBlbmRlbnRCaXJ0aGRhdGUgfSBmcm9tIFwiLi9kZXBlbmRlbnRzXCI7XHJcbmltcG9ydCB7IGFkZERlc2NyaXB0aW9uVG9TZWN0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9hZGQtZGVzY3JpcHRpb25cIjtcclxuaW1wb3J0IHsgc29saWNpdG9yTG9va3VwLCBzb2xpY2l0b3JSZXF1aXJlZE9yQ2xlYXJlZCB9IGZyb20gXCIuL3BhZ2VzL2VsaWdpYmlsaXR5LXBhcnQtYlwiO1xyXG5pbXBvcnQgeyBpbml0U2hhcmVUcmFuc2FjdGlvbiB9IGZyb20gXCIuL3BhZ2VzL3NoYXJlLXRyYW5zYWN0aW9uXCI7XHJcbmltcG9ydCB7IGluaXRYcm1Qb3J0YWwgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2xvYWQteHJtXCI7XHJcbmltcG9ydCB7IGluaXRTaGFyZWRPd25lcnNoaXBBZ3JlZW1lbnQgfSBmcm9tIFwiLi9wYWdlcy9zaGFyZWQtb3duZXJzaGlwLWFncmVlbWVudFwiO1xyXG5pbXBvcnQgeyBhdXRvY29tcGxldGVPZmYgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2Zvcm0taGVscGVyc1wiO1xyXG5pbXBvcnQgeyBpbml0R29hbHNNYW5hZ2VtZW50IH0gZnJvbSBcIi4vL3BhZ2VzL2dvYWxzLW1hbmFnZW1lbnRcIjtcclxuXHJcbi8qKiBWYXJpYWJsZXMgZGVmaW5lZCBmb3IgZWFjaCBmb3JtIGluIFBITyBwb3J0YWwgKi9cclxuZGVjbGFyZSBjb25zdCBwYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbmRlY2xhcmUgY29uc3Qgc3RlcDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5kZWNsYXJlIGNvbnN0IGNvbnRhY3Q6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuZGVjbGFyZSBjb25zdCBQSE9fS0VZOiBzdHJpbmc7IC8vIERlZmluZWQgaW4gcG9ydGFsIHNpdGUgc2V0dGluZ3NcclxuZGVjbGFyZSBjb25zdCBJTkNPTUVfREVTQ1JJUFRJT05fSFRNTDogc3RyaW5nOyAvLyBEZWZpbmVkIGluIHBvcnRhbCBjb250ZW50IHNuaXBwZXRzLCB1c2VkIGluIFBhcnQgQlxyXG5kZWNsYXJlIGNvbnN0IEFUVEFDSE1FTlRfREVTQ1JJUFRJT05fSFRNTDogc3RyaW5nOyAvLyBEZWZpbmVkIGluIHBvcnRhbCBjb250ZW50IHNuaXBwZXRzLCB1ZXNkIGluIFBhcnQgQ1xyXG5cclxuLyoqXHJcbiAqIExvYWQgY3VzdG9taXNhdGlvbiBkZXBlbmRpbmcgb24gcGFnZSBkZWZpbmVkIGluIFBITyBwb3J0YWwuXHJcbiAqIE5COiBUaGVzZSBhcmUgaGFyZCBjb2RlZCB2YXJpYWJsZXMgZm9yIGVhY2ggYXBwbGljYXRpb24gc3RlcCBhZGRlZCBpbiBwb3J0YWwuXHJcbiAqL1xyXG5jb25zdCBsb2FkQ3VzdG9taXNhdGlvbiA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcclxuICBsZXQgcmVuZGVyID0gdHJ1ZTtcclxuICBpZiAodHlwZW9mIHBhZ2UgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgIGlmIChwYWdlICE9PSBwYWdlVHlwZS5BUFBMSUNBVElPTl9ERVRBSUxTKSB7XHJcbiAgICAgIC8vIERvIG5vdCB3YW50IHRvIGhpZGUgaW52YWxpZCBzdWJtaXNzaW9uIGVycm9yIG1lc3NhZ2VzXHJcbiAgICAgIG1hbmFnZUVycm9ycygpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwYWdlKSB7XHJcbiAgICAgIGNhc2UgcGFnZVR5cGUuQVBQTElDQVRJT05fREVUQUlMUzpcclxuICAgICAgICBpbml0QXBwbGljYXRpb25EZXRhaWxzU2V0dGluZ3MoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBwYWdlVHlwZS5BRERJVElPTkFMX0FQUExJQ0FOVDpcclxuICAgICAgICBpbml0QWRkaXRpb25hbEFwcGxpY2FudFNldHRpbmdzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgcGFnZVR5cGUuRUxJR0lCSUxJVFk6XHJcbiAgICAgICAgaW5pdEVsaWdpYmlsaXR5U2V0dGluZ3MoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBwYWdlVHlwZS5TT1VSQ0VPRklOQ09NRTpcclxuICAgICAgICBpbml0U291cmNlT2ZJbmNvbWUoKTtcclxuICAgICAgICBkb2xsYXJTaWduc1RvQ3VycmVuY3lGaWVsZHMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBwYWdlVHlwZS5QUk9GSUxFOlxyXG4gICAgICAgIGluaXRQcm9maWxlU2V0dGluZ3MoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBwYWdlVHlwZS5ERVBFTkRFTlQ6XHJcbiAgICAgICAgbWFuYWdlRGVwZW5kZW50QmlydGhkYXRlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgcGFnZVR5cGUuU0hBUkVfVFJBTlNBQ1RJT046XHJcbiAgICAgICAgZG9sbGFyU2lnbnNUb0N1cnJlbmN5RmllbGRzKCk7XHJcbiAgICAgICAgaW5pdFhybVBvcnRhbChpbml0U2hhcmVUcmFuc2FjdGlvbik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgcGFnZVR5cGUuU0hBUkVEX09XTkVSU0hJUDpcclxuICAgICAgICBpbml0U2hhcmVkT3duZXJzaGlwQWdyZWVtZW50KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgcGFnZVR5cGUuQ09OVEFDVF9VUzpcclxuICAgICAgICBhdXRvY29tcGxldGVPZmYoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBwYWdlVHlwZS5NWV9SRVFVRVNUUzpcclxuICAgICAgICBhdXRvY29tcGxldGVPZmYoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBwYWdlVHlwZS5HT0FMU19NQU5BR0VNRU5UOlxyXG4gICAgICAgIGluaXRHb2Fsc01hbmFnZW1lbnQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBwYWdlVHlwZS5EQVNIQk9BUkQ6XHJcbiAgICAgICAgcmVuZGVyID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChyZW5kZXIpIHJlbmRlclBhZ2UoKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDdXN0b21pc2F0aW9uIHRvIGJlIGluaXRpYWxpc2VkIG9uIGRvY3VtZW50IHJlYWR5LlxyXG4gKi9cclxuJCgoKSA9PiB7XHJcbiAgbG9hZEN1c3RvbWlzYXRpb24oKTtcclxufSk7XHJcblxyXG4vKipcclxuICogSW5pdGlhbGlzZSBjdXN0b21pc2F0aW9uIGZvciBhcHBsaWNhdGlvbiBkZXRhaWxzIHBhZ2UuXHJcbiAqL1xyXG5jb25zdCBpbml0QXBwbGljYXRpb25EZXRhaWxzU2V0dGluZ3MgPSAoKTogdm9pZCA9PiB7XHJcbiAgbG9hZEhlbHBUZXh0KCk7XHJcbiAgbWFuYWdlQXBwbGljYXRpb25CdXR0b25zKCk7XHJcbiAgZGlzYWJsZVJlbW92ZVByaW1hcnlDb250YWN0KCk7XHJcbiAgLy8gY2hlY2sgZm9yIG9wZW5pbmcgYWRkIGV4aXN0aW5nIGFwcGxpY2FudHMgbW9kYWxcclxuICBjb25zdCBwYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XHJcbiAgaWYgKHBhcmFtcy5oYXMoYWRkRXhpc3RpbmdQYXJhbSkpIHtcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAkKGBhW3RpdGxlPVwiQXNzb2NpYXRlXCJdYCkudHJpZ2dlcihcImNsaWNrXCIpO1xyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpc2UgY3VzdG9taXNhdGlvbiBmb3IgYWRkaXRpb25hbCBhcHBsaWNhdGlvbiBpbnNlcnQuXHJcbiAqL1xyXG5jb25zdCBpbml0QWRkaXRpb25hbEFwcGxpY2FudFNldHRpbmdzID0gKCk6IHZvaWQgPT4ge1xyXG4gIHN3aXRjaCAoc3RlcCkge1xyXG4gICAgY2FzZSBzdGVwVHlwZS5BOlxyXG4gICAgICBpbml0QWRkaXRpb25hbFBhcnRBKCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBzdGVwVHlwZS5COlxyXG4gICAgICBpbml0QWRkaXRpb25hbFBhcnRCKCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBzdGVwVHlwZS5DOlxyXG4gICAgICBpbml0QWRkaXRpb25hbFBhcnRDKCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXNlIGN1c3RvbWlzYXRpb24gZm9yIGFkZGl0aW9uYWwgYXBwbGljYXRpb24gaW5zZXJ0IHBhcnQgQS5cclxuICovXHJcbmNvbnN0IGluaXRBZGRpdGlvbmFsUGFydEEgPSAoKTogdm9pZCA9PiB7XHJcbiAgbG9hZEhlbHBUZXh0KCk7XHJcbiAgYWRkQ29weUFkZHJlc3NCdXR0b24oKTtcclxuICBkb3dubG9hZEFkZHJlc3NGaW5kZXIoUEhPX0tFWSk7XHJcbiAgbWFuYWdlRXRobmljaXR5KCk7XHJcbiAgYWRkRW1haWxDb25maXJtYXRpb25GaWVsZCgpO1xyXG4gIG1hbmFnZVBob25lTnVtYmVycyhwaG9uZUZpZWxkSWRzKTtcclxuICBtYW5hZ2VFeGlzdGluZ0FkZGl0aW9uYWwocGFnZVR5cGUuQVBQTElDQVRJT05fREVUQUlMUywgYWRkRXhpc3RpbmdQYXJhbSk7XHJcbiAgbWFuYWdlQmlydGhkYXRlKCk7XHJcbiAgdHVybk9mZkF1dG9jb21wbGV0ZSgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpc2UgY3VzdG9taXNhdGlvbiBmb3IgYWRkaXRpb25hbCBhcHBsaWNhdGlvbiBpbnNlcnQgcGFydCBCLlxyXG4gKi9cclxuY29uc3QgaW5pdEFkZGl0aW9uYWxQYXJ0QiA9ICgpOiB2b2lkID0+IHtcclxuICBkb2xsYXJTaWduc1RvQ3VycmVuY3lGaWVsZHMoKTtcclxuICBsb2FkSGVscFRleHQoKTtcclxuICBtYW5hZ2VJbnNlcnRJbmNvbWUoKTtcclxuICBtYW5hZ2VTZWN0aW9uVmlzaWJpbGl0eSgpO1xyXG4gIG1hbmFnZUxvY2F0aW9ucygpO1xyXG4gIGFkZERlc2NyaXB0aW9uVG9TZWN0aW9uKFwiU291cmNlIE9mIEluY29tZVwiLCBJTkNPTUVfREVTQ1JJUFRJT05fSFRNTCk7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5pdGlhbGlzZSBjdXN0b21pc2F0aW9uIGZvciBhZGRpdGlvbmFsIGFwcGxpY2F0aW9uIGluc2VydCBwYXJ0IEMuXHJcbiAqL1xyXG5jb25zdCBpbml0QWRkaXRpb25hbFBhcnRDID0gKCk6IHZvaWQgPT4ge1xyXG4gIGxvYWRIZWxwVGV4dCgpO1xyXG4gIHNldFN0YXR1dG9yeUxhYmVsKCk7XHJcbiAgbWFuYWdlVXNlRXhpc3RpbmdEb2N1bWVudHMoKTtcclxuICBtYW5hZ2VBdHRhY2htZW50cyhmaWxlUHJlZml4KTtcclxuICBhZGRQcml2YWN5U3RhdGVtZW50QnV0dG9uKCk7XHJcbiAgYWRkRGVzY3JpcHRpb25Ub1NlY3Rpb24oXCJBdHRhY2htZW50IENoZWNrbGlzdFwiLCBBVFRBQ0hNRU5UX0RFU0NSSVBUSU9OX0hUTUwpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpc2UgY3VzdG9taXNhdGlvbiBmb3IgYXBwbGljYW50IGVkaXQgKC9waG9lbGlnaWJpbGl0eSkuXHJcbiAqL1xyXG5jb25zdCBpbml0RWxpZ2liaWxpdHlTZXR0aW5ncyA9ICgpOiB2b2lkID0+IHtcclxuICBzd2l0Y2ggKHN0ZXApIHtcclxuICAgIGNhc2Ugc3RlcFR5cGUuQTpcclxuICAgICAgaW5pdEVsaWdpYmlsaXR5UGFydEEoKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIHN0ZXBUeXBlLkI6XHJcbiAgICAgIGluaXRFbGlnaWJpbGl0eVBhcnRCKCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBzdGVwVHlwZS5DOlxyXG4gICAgICBpbml0RWxpZ2liaWxpdHlQYXJ0QygpO1xyXG4gICAgICBicmVhaztcclxuICB9XHJcbn07XHJcblxyXG4vKipcclxuICogSW5pdGlhbGlzZSBjdXN0b21pc2F0aW9uIGZvciBhcHBsaWNhbnQgZWRpdCBwYXJ0IEEuXHJcbiAqL1xyXG5jb25zdCBpbml0RWxpZ2liaWxpdHlQYXJ0QSA9ICgpOiB2b2lkID0+IHtcclxuICBsb2FkSGVscFRleHQoKTtcclxuICBhZGRDb3B5QWRkcmVzc0J1dHRvbigpO1xyXG4gIGRvd25sb2FkQWRkcmVzc0ZpbmRlcihQSE9fS0VZKTtcclxuICBtYW5hZ2VFdGhuaWNpdHkoKTtcclxuICBtYW5hZ2VQaG9uZU51bWJlcnMocGhvbmVGaWVsZElkcyk7XHJcbiAgbWFuYWdlQmlydGhkYXRlKCk7XHJcbiAgdHVybk9mZkF1dG9jb21wbGV0ZSgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpc2UgY3VzdG9taXNhdGlvbiBmb3IgYXBwbGljYW50IGVkaXQgcGFydCBCLlxyXG4gKi9cclxuY29uc3QgaW5pdEVsaWdpYmlsaXR5UGFydEIgPSAoKTogdm9pZCA9PiB7XHJcbiAgZG9sbGFyU2lnbnNUb0N1cnJlbmN5RmllbGRzKCk7XHJcbiAgbG9hZEhlbHBUZXh0KCk7XHJcbiAgbWFuYWdlRWRpdEluY29tZSgpO1xyXG4gIG1hbmFnZVNlY3Rpb25WaXNpYmlsaXR5KCk7XHJcbiAgc29saWNpdG9yUmVxdWlyZWRPckNsZWFyZWQoKTtcclxuICBzb2xpY2l0b3JMb29rdXAoKTtcclxuICBtYW5hZ2VMb2NhdGlvbnMoKTtcclxuICBhZGREZXNjcmlwdGlvblRvU2VjdGlvbihcIlNvdXJjZSBPZiBJbmNvbWVcIiwgSU5DT01FX0RFU0NSSVBUSU9OX0hUTUwpO1xyXG4gIHN3aXRjaCAoY29udGFjdCkge1xyXG4gICAgY2FzZSBjb250YWN0VHlwZS5QUklNQVJZOlxyXG4gICAgICBtYW5hZ2VBc3NldFRvdGFsKCk7XHJcbiAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpc2UgY3VzdG9taXNhdGlvbiBmb3IgYXBwbGljYW50IGVkaXQgcGFydCBDLlxyXG4gKi9cclxuY29uc3QgaW5pdEVsaWdpYmlsaXR5UGFydEMgPSAoKTogdm9pZCA9PiB7XHJcbiAgaW5pdEFkZGl0aW9uYWxQYXJ0QygpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpc2UgY3VzdG9tIHNldHRpbmdzIG9uIHByb2ZpbGUgcGFnZS5cclxuICovXHJcbmNvbnN0IGluaXRQcm9maWxlU2V0dGluZ3MgPSAoKTogdm9pZCA9PiB7XHJcbiAgbWFuYWdlRXRobmljaXR5KCk7XHJcbiAgbWFuYWdlUGhvbmVOdW1iZXJzKHBob25lRmllbGRJZHMpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIGFkZCAkIHBsYWNlaG9sZGVycyB0byBtb25leSBmaWVsZHMgdGhhdCBkbyBub3QgaGF2ZSBpdCB5ZXRcclxuICovXHJcbmNvbnN0IGRvbGxhclNpZ25zVG9DdXJyZW5jeUZpZWxkcyA9ICgpOiB2b2lkID0+IHtcclxuICAkKFwiZGl2Om5vdCguaW5wdXQtZ3JvdXApID4gaW5wdXQubW9uZXk6bm90KC5yZWFkb25seSlcIikucGFyZW50KCkucHJlcGVuZCgnPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPiQ8L3NwYW4+Jyk7XHJcbiAgJChcImRpdjpub3QoLmlucHV0LWdyb3VwKSA+IGlucHV0Lm1vbmV5Om5vdCgucmVhZG9ubHkpXCIpLnBhcmVudCgpLmFkZENsYXNzKFwiaW5wdXQtZ3JvdXBcIik7XHJcbn07XHJcblxyXG5jb25zdCB0dXJuT2ZmQXV0b2NvbXBsZXRlID0gKCk6IHZvaWQgPT4ge1xyXG4gICQoXCJpbnB1dFt0eXBlPSd0ZXh0J11cIikuYXR0cihcImF1dG9jb21wbGV0ZVwiLCBcIm5vcGVcIik7XHJcbiAgJChcImlucHV0W3R5cGU9J2VtYWlsJ11cIikuYXR0cihcImF1dG9jb21wbGV0ZVwiLCBcIm5vcGVcIik7XHJcbn07IiwiaW1wb3J0IHsgTWV0YURhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi90eXBpbmdzL0FkZHJlc3NGaW5kZXIvTWV0YWRhdGEnO1xyXG5pbXBvcnQge1xyXG4gIHBoeXNpY2FsQWRkcmVzc0ZpZWxkSWRzLFxyXG4gIHBvc3RhbEFkZHJlc3NGaWVsZElkcyxcclxufSBmcm9tICcuLi9lbnRpdGllcy9jb250YWN0JztcclxuaW1wb3J0IHsgYWRkQnV0dG9uVG9TZWN0aW9uIH0gZnJvbSAnLi9hZGQtYnV0dG9uJztcclxuXHJcbi8qIFBIT19LRVkgaXMgZGVmaW5lZCBpbiB0aGUgcGFnZSBmb290ZXIgdXNpbmcgbGlxdWlkICovXHJcbmRlY2xhcmUgbGV0IEFkZHJlc3NGaW5kZXI6IGFueTtcclxuXHJcbi8qKlxyXG4gKiBBZGRyZXNzIGZpZWxkcy5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzcyB7XHJcbiAgbGluZTE6IHN0cmluZztcclxuICBsaW5lMjogc3RyaW5nO1xyXG4gIGxpbmUzOiBzdHJpbmc7XHJcbiAgY2l0eTogc3RyaW5nO1xyXG4gIHBvc3RhbENvZGU6IHN0cmluZztcclxuICBjb3VudHJ5SWQ6IHN0cmluZztcclxuICB0ZXJyaXRvcmlhbEF1dGhvcml0eUlkOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGRyZXNzIGZpbmRlciBOWiBvcHRpb25zIGZvciBwaHlzaWNhbCBhZGRyZXNzLlxyXG4gKiBTZWUgaHR0cHM6Ly9hZGRyZXNzZmluZGVyLm56L2RvY3MvZGVtb3MvXHJcbiAqL1xyXG5jb25zdCBwaHlzaWNhbEFkZHJlc3NGaW5kZXJPcHRpb25zID0ge1xyXG4gIGFkZHJlc3NfcGFyYW1zOiB7XHJcbiAgICBwb3N0X2JveDogJzAnLFxyXG4gIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcmVzcyBmaW5kZXIgTlogb3B0aW9ucyBmb3IgcG9zdGFsIGFkZHJlc3MuXHJcbiAqIFNlZSBodHRwczovL2FkZHJlc3NmaW5kZXIubnovZG9jcy9kZW1vcy9cclxuICovXHJcbmNvbnN0IHBvc3RhbEFkZHJlc3NGaW5kZXJPcHRpb25zID0ge1xyXG4gIGFkZHJlc3NfcGFyYW1zOiB7XHJcbiAgICBkZWxpdmVyZWQ6ICcxJyxcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIERvd25sb2FkcyB0aGUgQWRkcmVzcyBGaW5kZXIgTlogc2NyaXB0IGFuZCBiaW5kcyBpdCB0byB0aGUgRE9NLlxyXG4gKiBTZWUgaHR0cHM6Ly9hZGRyZXNzZmluZGVyLm56L2RvY3MvZGVtb3MvXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZG93bmxvYWRBZGRyZXNzRmluZGVyID0gKGFkZHJLZXk6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICBzY3JpcHQuc3JjID0gJ2h0dHBzOi8vYXBpLmFkZHJlc3NmaW5kZXIuaW8vYXNzZXRzL3YzL3dpZGdldC5qcyc7XHJcbiAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcclxuICBzY3JpcHQub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaW5pdEFkZHJlc3NGaW5kZXIoYWRkcktleSk7XHJcbiAgfTtcclxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZXMgdGhlIEFkZHJlc3MgRmluZGVyIGZvciBwb3N0YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3MgZmllbGRzLlxyXG4gKi9cclxuY29uc3QgaW5pdEFkZHJlc3NGaW5kZXIgPSAoYWRkcktleTogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgYmluZEFkZHJlc3NGaW5kZXIoXHJcbiAgICBwaHlzaWNhbEFkZHJlc3NGaWVsZElkcyxcclxuICAgIHBoeXNpY2FsQWRkcmVzc0ZpbmRlck9wdGlvbnMsXHJcbiAgICBhZGRyS2V5XHJcbiAgKTtcclxuICBiaW5kQWRkcmVzc0ZpbmRlcihwb3N0YWxBZGRyZXNzRmllbGRJZHMsIHBvc3RhbEFkZHJlc3NGaW5kZXJPcHRpb25zLCBhZGRyS2V5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBCaW5kcyBhZGRyZXNzIGZpbmRlciB3aWRnZXQgdG8gbGluZSAxIG9mIGFkZHJlc3MgZmllbGQuXHJcbiAqIEBwYXJhbSBhZGRyZXNzRmllbGRzIEFkZHJlc3MgZmllbGQgSURzIHRvIGJpbmQuXHJcbiAqIEBwYXJhbSBvcHRpb25zIEFkZHJlc3MgRmluZGVyIG9wdGlvbnMuXHJcbiAqL1xyXG5jb25zdCBiaW5kQWRkcmVzc0ZpbmRlciA9IChcclxuICBhZGRyZXNzRmllbGRzOiBBZGRyZXNzLFxyXG4gIG9wdGlvbnM6IGFueSxcclxuICBhZGRyS2V5OiBzdHJpbmdcclxuKTogdm9pZCA9PiB7XHJcbiAgbGV0IHBoeXNpY2FsV2lkZ2V0ID0gbmV3IEFkZHJlc3NGaW5kZXIuV2lkZ2V0KFxyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYWRkcmVzc0ZpZWxkcy5saW5lMSksXHJcbiAgICBhZGRyS2V5LFxyXG4gICAgJ05aJyxcclxuICAgIG9wdGlvbnNcclxuICApO1xyXG4gIHBoeXNpY2FsV2lkZ2V0Lm9uKCdhZGRyZXNzOnNlbGVjdCcsIGZ1bmN0aW9uIChfLCBkYXRhKSB7XHJcbiAgICBmaWxsQWRkcmVzc0ZpZWxkcyhhZGRyZXNzRmllbGRzLCBkYXRhKTtcclxuICB9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQb3B1bGF0ZXMgYWRkcmVzcyBmaWVsZHMgd2hlbiBBZGRyZXNzIEZpbmRlciByZXN1bHQgaXMgc2VsZWN0ZWQuXHJcbiAqIEBwYXJhbSBhZGRyZXNzRmllbGRJZHMgQWRkcmVzcyBmaWVsZCBJRHMgdG8gcG9wdWxhdGUuXHJcbiAqIEBwYXJhbSBtZXRhRGF0YSBBZGRyZXNzIEZpbmRlciBtZXRhZGF0YSB1c2VkIHRvIHBvcHVsYXRlIGFkZHJlc3MgZmllbGRzLlxyXG4gKi9cclxuY29uc3QgZmlsbEFkZHJlc3NGaWVsZHMgPSAoXHJcbiAgYWRkcmVzc0ZpZWxkSWRzOiBBZGRyZXNzLFxyXG4gIG1ldGFEYXRhOiBNZXRhRGF0YVxyXG4pOiB2b2lkID0+IHtcclxuICBYcm0uUG9ydGFsLkZvcm0uZ2V0KGFkZHJlc3NGaWVsZElkcy5saW5lMSkuc2V0VmFsdWUobWV0YURhdGEuYWRkcmVzc19saW5lXzEpO1xyXG4gIFhybS5Qb3J0YWwuRm9ybS5nZXQoYWRkcmVzc0ZpZWxkSWRzLmxpbmUyKS5zZXRWYWx1ZShcclxuICAgIG1ldGFEYXRhLmFkZHJlc3NfbGluZV8yIHx8ICcnXHJcbiAgKTtcclxuICBYcm0uUG9ydGFsLkZvcm0uZ2V0KGFkZHJlc3NGaWVsZElkcy5saW5lMykuc2V0VmFsdWUobWV0YURhdGEuc3VidXJiKTtcclxuICBYcm0uUG9ydGFsLkZvcm0uZ2V0KGFkZHJlc3NGaWVsZElkcy5jaXR5KS5zZXRWYWx1ZShtZXRhRGF0YS5jaXR5KTtcclxuICBYcm0uUG9ydGFsLkZvcm0uZ2V0KGFkZHJlc3NGaWVsZElkcy5wb3N0YWxDb2RlKS5zZXRWYWx1ZShtZXRhRGF0YS5wb3N0Y29kZSk7XHJcbiAgLy8gQ291bnRyeSBtdXN0IGJlIE5ldyBaZWFsYW5kIGZvciBhIHN1Y2Nlc3NmdWwgc2VhcmNoIGFzIEFkZHJlc3NGaW5kZXIgaXMgTlogb25seVxyXG4gICQoYCMke2FkZHJlc3NGaWVsZElkcy5jb3VudHJ5SWR9YCkudmFsKFxyXG4gICAgJChcclxuICAgICAgYHNlbGVjdFtpZD1cIiR7YWRkcmVzc0ZpZWxkSWRzLmNvdW50cnlJZH1cIl0gb3B0aW9uOmNvbnRhaW5zKCdOZXcgWmVhbGFuZCcpYFxyXG4gICAgKS52YWwoKSBhcyBzdHJpbmdcclxuICApO1xyXG4gIGlmIChtZXRhRGF0YS50YSkge1xyXG4gICAgJChgIyR7YWRkcmVzc0ZpZWxkSWRzLnRlcnJpdG9yaWFsQXV0aG9yaXR5SWR9YCkudmFsKFxyXG4gICAgICAkKFxyXG4gICAgICAgIGBzZWxlY3RbaWQ9XCIke2FkZHJlc3NGaWVsZElkcy50ZXJyaXRvcmlhbEF1dGhvcml0eUlkfVwiXSBvcHRpb246Y29udGFpbnMoXCIke21ldGFEYXRhLnRhfVwiKWBcclxuICAgICAgKS52YWwoKSBhcyBzdHJpbmdcclxuICAgICk7XHJcbiAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgYSBidXR0b24gdG8gY29weSBhZGRyZXNzIGZyb20gcGh5c2ljYWwgdG8gcG9zdGFsIGFkZHJlc3Mgc2VjdGlvbi5cclxuICovXHJcbmV4cG9ydCBjb25zdCBhZGRDb3B5QWRkcmVzc0J1dHRvbiA9ICgpOiB2b2lkID0+IHtcclxuICBjb25zdCBidXR0b25JZCA9ICdjb3B5LWFkZHJlc3MtYnV0dG9uJztcclxuICBhZGRCdXR0b25Ub1NlY3Rpb24oJ3Bvc3RhbCBhZGRyZXNzJywgYnV0dG9uSWQsICdDb3B5IHBoeXNpY2FsIGFkZHJlc3MnKTtcclxuICAkKGAjJHtidXR0b25JZH1gKS5vbignY2xpY2snLCBjb3B5QWRkcmVzcyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29waWVzIGFkZHJlc3MgZnJvbSBwaHlzaWNhbCB0byBwb3N0YWwgYWRkcmVzcyBzZWN0aW9uLlxyXG4gKi9cclxuY29uc3QgY29weUFkZHJlc3MgPSAoKTogdm9pZCA9PiB7XHJcbiAgT2JqZWN0LmtleXMocGh5c2ljYWxBZGRyZXNzRmllbGRJZHMpLm1hcChmdW5jdGlvbiAoa2V5LCBfKSB7XHJcbiAgICBYcm0uUG9ydGFsLkZvcm0uZ2V0KHBvc3RhbEFkZHJlc3NGaWVsZElkc1trZXldKS5zZXRWYWx1ZShcclxuICAgICAgWHJtLlBvcnRhbC5Gb3JtLmdldChwaHlzaWNhbEFkZHJlc3NGaWVsZElkc1trZXldKS5nZXRWYWx1ZSgpXHJcbiAgICApO1xyXG4gIH0pO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBBZGRyZXNzIH0gZnJvbSAnLi4vY29tbW9uL2FkZHJlc3MnO1xyXG5cclxuLyoqXHJcbiAqIFBvc3RhbCBhZGRyZXNzIGZpZWxkIElEcy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBwb3N0YWxBZGRyZXNzRmllbGRJZHM6IEFkZHJlc3MgPSB7XHJcbiAgbGluZTE6ICdhZGRyZXNzMl9saW5lMScsXHJcbiAgbGluZTI6ICdhZGRyZXNzMl9saW5lMicsXHJcbiAgbGluZTM6ICdhZGRyZXNzMl9saW5lMycsXHJcbiAgY2l0eTogJ2FkZHJlc3MyX2NpdHknLFxyXG4gIHBvc3RhbENvZGU6ICdhZGRyZXNzMl9wb3N0YWxjb2RlJyxcclxuICBjb3VudHJ5SWQ6ICdrYm56X3Bvc3RhbGFkZHJlc3Njb3VudHJ5aWQnLFxyXG4gIHRlcnJpdG9yaWFsQXV0aG9yaXR5SWQ6ICdrYm56X3Bvc3RhbGFkZHJlc3N0ZXJyaXRvcmlhbGF1dGhvcml0eWlkJyxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQaHlzaWNhbCBhZGRyZXNzIGZpZWxkIElEcy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBwaHlzaWNhbEFkZHJlc3NGaWVsZElkczogQWRkcmVzcyA9IHtcclxuICBsaW5lMTogJ2FkZHJlc3MxX2xpbmUxJyxcclxuICBsaW5lMjogJ2FkZHJlc3MxX2xpbmUyJyxcclxuICBsaW5lMzogJ2FkZHJlc3MxX2xpbmUzJyxcclxuICBjaXR5OiAnYWRkcmVzczFfY2l0eScsXHJcbiAgcG9zdGFsQ29kZTogJ2FkZHJlc3MxX3Bvc3RhbGNvZGUnLFxyXG4gIGNvdW50cnlJZDogJ2tibnpfcGh5c2ljYWxhZGRyZXNzY291bnRyeWlkJyxcclxuICB0ZXJyaXRvcmlhbEF1dGhvcml0eUlkOiAna2Juel9waHlzaWNhbGFkZHJlc3N0ZXJyaXRvcmlhbGF1dGhvcml0eWlkJyxcclxufTtcclxuIiwiLyoqXHJcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZpZWxkcyBmb3IgdGhlIGhlbHAgdGV4dCBsaW5rIGFuZCBtb2RhbC5cclxuICovXHJcbmludGVyZmFjZSBIZWxwQ29uZmlnIHtcclxuICBmaWVsZDogc3RyaW5nO1xyXG4gIGhlbHB0ZXh0aGVhZGluZzogc3RyaW5nO1xyXG4gIGhlbHB0ZXh0OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEgcmV0dXJuZWQgZnJvbSAnRmllbGQgU2V0dGluZ3MnIGN1c3RvbVxyXG4gKiBlbnRpdHkgT0RhdGEgcmVxdWVzdC5cclxuICovXHJcbmludGVyZmFjZSBIZWxwSnNvbiB7XHJcbiAga2Juel9maWVsZHNldHRpbmdpZDogc3RyaW5nO1xyXG4gIGtibnpfbmFtZTogc3RyaW5nO1xyXG4gIGtibnpfZW50aXR5Zm9ybToge1xyXG4gICAgSWQ/OiBzdHJpbmc7XHJcbiAgICBOYW1lPzogc3RyaW5nO1xyXG4gIH0gfCBudWxsO1xyXG4gIGtibnpfd2ViZm9ybToge1xyXG4gICAgSWQ/OiBzdHJpbmc7XHJcbiAgICBOYW1lPzogc3RyaW5nO1xyXG4gIH0gfCBudWxsO1xyXG4gIGtibnpfaGVscHRleHRoZWFkaW5nOiBzdHJpbmc7XHJcbiAga2Juel9oZWxwdGV4dDogc3RyaW5nO1xyXG4gIGtibnpfcGxhY2Vob2xkZXJ0ZXh0OiBzdHJpbmc7XHJcbiAgbGlzdF9pZDogc3RyaW5nO1xyXG4gIHZpZXdfaWQ6IHN0cmluZztcclxuICBlbnRpdHlfcGVybWlzc2lvbnNfZW5hYmxlZDogc3RyaW5nO1xyXG59XHJcblxyXG4vKiogT0RhdGEgVVJMIHRvIHJlcXVlc3QgaGVscCB0ZXh0IGZyb20gJ0ZpZWxkIFNldHRpbmdzJyBlbnRpdHkuICovXHJcbmRlY2xhcmUgY29uc3QgaGVscFRleHRPZGF0YVVybDogc3RyaW5nO1xyXG5cclxuLyoqXHJcbiAqIExvYWRzIGFuZCBiaW5kcyBoZWxwIHRleHQgYW5kIHBsYWNlaG9sZGVyIGRhdGEgZnJvbSAnRmllbGQgU2V0dGluZ3MnIGVudGl0eSB0byBmb3JtIGZpZWxkcy5cclxuICogUHJlZmVyZW50aWFsbHkgdGFrZXMgZmllbGQgZGF0YSBib3VuZCB0byByZXF1ZXN0aW5nIGVudGl0eS8gd2ViIGZvcm0gd2hlbiBkdXBsaWNhdGVzLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGxvYWRIZWxwVGV4dCA9ICgpOiB2b2lkID0+IHtcclxuICAkLmFqYXgoe1xyXG4gICAgdHlwZTogJ0dFVCcsXHJcbiAgICB1cmw6IGhlbHBUZXh0T2RhdGFVcmwsIC8vIFVSTCBnZW5lcmF0ZWQgd2l0aCBsaXF1aWQgb24gZm9ybVxyXG4gICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgbGV0IGRhdGE6IEFycmF5PEhlbHBKc29uPiA9IHJlc3VsdC52YWx1ZTtcclxuICAgICAgbGV0IGZvcm1EYXRhOiBBcnJheTxIZWxwSnNvbj4gPSBkYXRhLmZpbHRlcihmdW5jdGlvbiAoaTogSGVscEpzb24pIHtcclxuICAgICAgICByZXR1cm4gaS5rYm56X2VudGl0eWZvcm07IC8vIEdpdmVuIGVudGl0eS8gd2ViIGZvcm0gYXNzb2NpYXRlZCB3aXRoIGNvbHVtblxyXG4gICAgICB9KTtcclxuICAgICAgbGV0IGdlbmVyYWxEYXRhOiBBcnJheTxIZWxwSnNvbj4gPSBkYXRhLmZpbHRlcihmdW5jdGlvbiAoaTogSGVscEpzb24pIHtcclxuICAgICAgICByZXR1cm4gIWkua2Juel9lbnRpdHlmb3JtOyAvLyBObyBmb3JtcyBhc3NvY2lhdGVkIHdpdGggY29sdW1uXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gR28gdGhyb3VnaCBkYXRhIHdpdGggbm8gZm9ybSBhc3NvY2lhdGlvbiBhbmQgYXBwZW5kIGl0IElGIGNvbHVtbiBoZWxwIGRvZXMgbm90IGV4aXN0XHJcbiAgICAgIGdlbmVyYWxEYXRhLmZvckVhY2goZnVuY3Rpb24gKG5ld0l0ZW06IEhlbHBKc29uLCBfKSB7XHJcbiAgICAgICAgaWYgKGZpbmRXaXRoQXR0cihmb3JtRGF0YSwgJ2tibnpfbmFtZScsIG5ld0l0ZW0ua2Juel9uYW1lKSA9PT0gLTEpIHtcclxuICAgICAgICAgIC8vIERpZCBub3QgZmluZCBpbiBleGlzdGluZyBkYXRhXHJcbiAgICAgICAgICBmb3JtRGF0YS5wdXNoKG5ld0l0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IFtfLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhmb3JtRGF0YSkpIHtcclxuICAgICAgICBpZiAoKFhybS5Qb3J0YWwuRm9ybS5nZXQoZWxlbWVudC5rYm56X25hbWUpIGFzIGFueSkuaWQpIHtcclxuICAgICAgICAgIC8vIEZpZWxkIGV4aXN0cyBvbiBjdXJyZW50IGZvcm1cclxuICAgICAgICAgIGFkZEhlbHBUZXh0KHtcclxuICAgICAgICAgICAgZmllbGQ6IGVsZW1lbnQua2Juel9uYW1lLFxyXG4gICAgICAgICAgICBoZWxwdGV4dGhlYWRpbmc6IGVsZW1lbnQua2Juel9oZWxwdGV4dGhlYWRpbmcsXHJcbiAgICAgICAgICAgIGhlbHB0ZXh0OiBlbGVtZW50LmtibnpfaGVscHRleHQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmtibnpfbmFtZSA9PT0gJ2JpcnRoZGF0ZScpIHtcclxuICAgICAgICAgICAgJChgIyR7ZWxlbWVudC5rYm56X25hbWV9X2RhdGVwaWNrZXJfZGVzY3JpcHRpb25gKS5hdHRyKFxyXG4gICAgICAgICAgICAgICdwbGFjZWhvbGRlcicsXHJcbiAgICAgICAgICAgICAgZWxlbWVudC5rYm56X3BsYWNlaG9sZGVydGV4dFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJChgIyR7ZWxlbWVudC5rYm56X25hbWV9YCkuYXR0cihcclxuICAgICAgICAgICAgICAncGxhY2Vob2xkZXInLFxyXG4gICAgICAgICAgICAgIGVsZW1lbnQua2Juel9wbGFjZWhvbGRlcnRleHRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogRmluZHMgdGhlIGluZGV4IG9mIGFuIG9iamVjdCBieSB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlLlxyXG4gKiBAcGFyYW0gYXJyYXkgQXJyYXkgdG8gZmluZCBvYmplY3QgaW4uXHJcbiAqIEBwYXJhbSBhdHRyIEF0dHJpYnV0ZSBvZiBvYmplY3QgdG8gbG9vayBmb3IuXHJcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiBvYmplY3QncyBhdHRyaWJ1dGUuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIG9iamVjdCBpZiBmb3VuZCwgZWxzZSAtMSBpZiBvYmplY3QgZG9lcyBub3QgZXhpc3QuXHJcbiAqL1xyXG5jb25zdCBmaW5kV2l0aEF0dHIgPSAoXHJcbiAgYXJyYXk6IEFycmF5PEhlbHBKc29uPixcclxuICBhdHRyOiBzdHJpbmcsXHJcbiAgdmFsdWU6IHN0cmluZ1xyXG4pOiBudW1iZXIgPT4ge1xyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgIGlmIChhcnJheVtpXVthdHRyXSA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIGk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiAtMTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGQgaGVscCB0ZXh0IHRvIGEgZGVmaW5lZCBmaWVsZC5cclxuICogQHBhcmFtIGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbiBmaWVsZHMgZm9yIHRoZSBoZWxwIHRleHQgbGluayBhbmQgbW9kYWwuXHJcbiAqL1xyXG5jb25zdCBhZGRIZWxwVGV4dCA9IChjb25maWc6IEhlbHBDb25maWcpOiB2b2lkID0+IHtcclxuICAvLyBGaW5kIHRoZSBmaWVsZCBhbmQgYWRkIGEgPGE+SGVscDwvYT4gZWxlbWVudCBuZWFyIHRoYXQgd2Ugd2lsbCB1c2UgdG8gb3BlbiB0aGUgbW9kYWwgd2hlbiB0aGUgdXNlciBjbGlja3MgaXQuXHJcbiAgJChgIyR7Y29uZmlnLmZpZWxkfV9sYWJlbGApXHJcbiAgICAucGFyZW50KClcclxuICAgIC5hcHBlbmQoXHJcbiAgICAgIGA8ZGl2IGNsYXNzPVwiaGVscHRleHRcIj48YSBpZD1cImhlbHBcIiBjbGFzcz1cIiR7Y29uZmlnLmZpZWxkfV9oZWxwIGhlbHBcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjJHtjb25maWcuZmllbGR9LWhlbHAtbW9kYWxcIj5IZWxwPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ25cIj48L2E+PC9kaXY+YCxcclxuICAgICAgZGVmaW5lSGVscE1vZGFsKGNvbmZpZylcclxuICAgICk7XHJcbn07XHJcblxyXG4vKipcclxuICogVGhlIEhUTUwgZGVmaW5pdGlvbiBvZiB0aGUgbW9kYWwgZm9yIGhlbHAgdGV4dC5cclxuICogQHBhcmFtIGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbiBmaWVsZHMgZm9yIHRoZSBoZWxwIHRleHQgbGluayBhbmQgbW9kYWwuXHJcbiAqIEByZXR1cm5zIEhUTUwgZGVmaW5pdGlvbiBvZiB0aGUgbW9kYWwgZm9yIGhlbHAgdGV4dC5cclxuICovXHJcbmNvbnN0IGRlZmluZUhlbHBNb2RhbCA9IChjb25maWc6IEhlbHBDb25maWcpOiBzdHJpbmcgPT4ge1xyXG4gIHJldHVybiBgXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cIm1vZGFsIGZhZGVcIlxyXG4gICAgICAgIGlkPVwiJHtjb25maWcuZmllbGR9LWhlbHAtbW9kYWxcIlxyXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgIHJvbGU9XCJkaWFsb2dcIlxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNsb3NlXCJcclxuICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgJnRpbWVzO1xyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCIke2NvbmZpZy5maWVsZH0tbW9kYWwtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICR7Y29uZmlnLmhlbHB0ZXh0aGVhZGluZ31cclxuICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj4ke2NvbmZpZy5oZWxwdGV4dH08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5cclxuICAgICAgICAgICAgICAgIENsb3NlXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PmA7XHJcbn07XHJcbiIsImltcG9ydCB7XHJcbiAgZW1haWxGaWVsZElkLFxyXG4gIGN1c3RvbUVtYWlsRmllbGRJZCxcclxuICBlbWFpbENvbmZpcm1FcnJvck1lc3NhYWdlLFxyXG59IGZyb20gJy4vY29uc3RhbnRzJztcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgZmllbGQgZm9yIHVzZXIgdG8gY29uZmlybSBlbWFpbCBhbmQgc2V0cyBhcyByZXF1aXJlZC5cclxuICovXHJcbmV4cG9ydCBjb25zdCBhZGRFbWFpbENvbmZpcm1hdGlvbkZpZWxkID0gKCk6IHZvaWQgPT4ge1xyXG4gIGNvbnN0IGN1c3RvbVJlRW50ZXJmaWVsZEh0bWw6IHN0cmluZyA9IGRlZmluZUNvbmZpcm1FbWFpbEh0bWwoKTtcclxuICAkKGAjJHtlbWFpbEZpZWxkSWR9YCkuY2xvc2VzdCgndGQnKS5hZnRlcihjdXN0b21SZUVudGVyZmllbGRIdG1sKTtcclxuICBYcm0uUG9ydGFsLkZvcm0uZ2V0KGAke2N1c3RvbUVtYWlsRmllbGRJZH1gKS5zZXRSZXF1aXJlZChcclxuICAgIHRydWUsXHJcbiAgICBjaGVja01hdGNoaW5nRW1haWxzLFxyXG4gICAgZW1haWxDb25maXJtRXJyb3JNZXNzYWFnZVxyXG4gICk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBIVE1MIGRlZmluaXRpb24gb2YgdGhlIENvbmZpcm0gRW1haWwgZmllbGQuXHJcbiAqIEByZXR1cm5zIEhUTUwgZGVmaW5pdGlvbiBvZiB0aGUgQ29uZmlybSBFbWFpbCBmaWVsZC5cclxuICovXHJcbmNvbnN0IGRlZmluZUNvbmZpcm1FbWFpbEh0bWwgPSAoKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBjdXN0b21FbWFpbGZpZWxkTGFiZWw6IHN0cmluZyA9ICdDb25maXJtIEVtYWlsJztcclxuICByZXR1cm4gYFxyXG4gIDx0ZCBjb2xzcGFuPVwiMVwiIHJvd3NwYW49XCIxXCIgY2xhc3M9XCJjbGVhcmZpeCBjZWxsIHRleHQgZm9ybS1jb250cm9sLWNlbGxcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmZvIHJlcXVpcmVkXCI+XHJcbiAgICAgIDxsYWJlbCBpZD1cIiR7Y3VzdG9tRW1haWxGaWVsZElkfV9sYWJlbFwiPiR7Y3VzdG9tRW1haWxmaWVsZExhYmVsfTwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIG1heGxlbmd0aD1cIjEwMFwiXHJcbiAgICAgICAgaWQ9XCIke2N1c3RvbUVtYWlsRmllbGRJZH1cIlxyXG4gICAgICAgIGNsYXNzPVwidGV4dCBmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgIHR5cGU9XCJlbWFpbFwiXHJcbiAgICAgICAgb25jaGFuZ2U9XCJzZXRJc0RpcnR5KHRoaXMuaWQpO1wiXHJcbiAgICAgICAgb25wYXN0ZT1cInJldHVybiBmYWxzZTtcIlxyXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm5vcGVcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbiAgPC90ZD5gO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIGVtYWlsIGFuZCBjb25maXJtZWQgZW1haWwgbWF0Y2guXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgZW1haWxzIG1hdGNoLlxyXG4gKi9cclxuY29uc3QgY2hlY2tNYXRjaGluZ0VtYWlscyA9ICgpOiBib29sZWFuID0+IHtcclxuICBjb25zdCBlbWFpbDogc3RyaW5nID0gWHJtLlBvcnRhbC5Gb3JtLmdldChgJHtlbWFpbEZpZWxkSWR9YCkuZ2V0VmFsdWUoKTtcclxuICBjb25zdCBjb25maXJtRW1haWw6IHN0cmluZyA9IFhybS5Qb3J0YWwuRm9ybS5nZXQoXHJcbiAgICBgJHtjdXN0b21FbWFpbEZpZWxkSWR9YFxyXG4gICkuZ2V0VmFsdWUoKTtcclxuXHJcbiAgcmV0dXJuIGVtYWlsID09PSBjb25maXJtRW1haWw7XHJcbn07XHJcblxyXG4vKipcclxuICogTWFrZXMgZW1haWwgZmllbGQgcmVhZG9ubHkuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgbWFrZUVtYWlsUmVhZE9ubHkgPSAoKTogdm9pZCA9PiB7XHJcbiAgWHJtLlBvcnRhbC5Gb3JtLmdldChlbWFpbEZpZWxkSWQpLnNldERpc2FibGUodHJ1ZSk7XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBNYW5hZ2UgcmVxdWlyZW1lbnQgdGhhdCBhdCBsZWFzdCBvbmUgb3V0IG9mIGhvbWUgYW5kIG1vYmlsZSBwaG9uZSBpcyByZXF1aXJlZC5cclxuICovXHJcbmV4cG9ydCBjb25zdCBtYW5hZ2VQaG9uZU51bWJlcnMgPSAocGhvbmVGaWVsZElkczogc3RyaW5nW10pOiB2b2lkID0+IHtcclxuICBmb3IgKGxldCBlbGVtZW50IG9mIHBob25lRmllbGRJZHMpIHtcclxuICAgICQoYCMke2VsZW1lbnR9YCkub24oJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgbWFuYWdlUGhvbmVSZXF1aXJlZChwaG9uZUZpZWxkSWRzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyBJbml0aWFsaXplXHJcbiAgbWFuYWdlUGhvbmVSZXF1aXJlZChwaG9uZUZpZWxkSWRzKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBEaXNwbGF5cyBib3RoIGhvbWUgYW5kIG1vYmlsZSBwaG9uZSBhcyByZXF1aXJlZCB1bnRpbCBvbmUgaXMgZmlsbGVkIGluO1xyXG4gKiB0aGVuIGJvdGggZGlzcGxheSBhcyBub3QgcmVxdWlyZWQuXHJcbiAqL1xyXG5jb25zdCBtYW5hZ2VQaG9uZVJlcXVpcmVkID0gKHBob25lRmllbGRJZHM6IHN0cmluZ1tdKTogdm9pZCA9PiB7XHJcbiAgLy8gZmluZCBvdXQgaWYgYW55IGZpZWxkcyBhcmUgcG9wdWxhdGVkXHJcbiAgbGV0IGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGZvciAobGV0IGVsZW1lbnQgb2YgcGhvbmVGaWVsZElkcykge1xyXG4gICAgaXNSZXF1aXJlZCA9ICFYcm0uUG9ydGFsLkZvcm0uZ2V0KGAke2VsZW1lbnR9YCkuZ2V0VmFsdWUoKTtcclxuICAgIGlmICghaXNSZXF1aXJlZCkge1xyXG4gICAgICAvLyBBIGZpZWxkIGhhcyBhIHZhbHVlXHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU2V0IGFsbCBwaG9uZSBmaWVsZHNcclxuICBmb3IgKGxldCBlbGVtZW50IG9mIHBob25lRmllbGRJZHMpIHtcclxuICAgIHNldFBob25lTnVtYmVyc1JlcXVpcmVkKGlzUmVxdWlyZWQsIGVsZW1lbnQpO1xyXG4gIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgcGhvbmUgbnVtYmVyIGZpZWxkcyBhcyByZXF1aXJlZCBvciBub3QuXHJcbiAqIEBwYXJhbSBpc1JlcXVpcmVkIFdoZXRoZXIgZmllbGRzIGFyZSByZXF1aXJlZC5cclxuICogQHBhcmFtIGVsZW1lbnQgSWQgb2YgZmllbGQuXHJcbiAqL1xyXG5jb25zdCBzZXRQaG9uZU51bWJlcnNSZXF1aXJlZCA9IChcclxuICBpc1JlcXVpcmVkOiBib29sZWFuLFxyXG4gIGVsZW1lbnQ6IHN0cmluZ1xyXG4pOiB2b2lkID0+IHtcclxuICBpc1JlcXVpcmVkXHJcbiAgICA/IFhybS5Qb3J0YWwuRm9ybS5nZXQoYCR7ZWxlbWVudH1gKS5zZXRSZXF1aXJlZChcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIHVuZGVmaW5lZCwgLy8gVXNlIGRlZmF1bHQgdmFsaWRhdGlvbiBmdW5jdGlvblxyXG4gICAgICAgICdQbGVhc2UgZW50ZXIgYXQgbGVhc3QgMSBjb250YWN0IHBob25lIG51bWJlci4nXHJcbiAgICAgIClcclxuICAgIDogWHJtLlBvcnRhbC5Gb3JtLmdldChgJHtlbGVtZW50fWApLnNldFJlcXVpcmVkKGZhbHNlKTtcclxufTtcclxuIiwiaW1wb3J0IHsgYWRkQnV0dG9uVG9TZWN0aW9uIH0gZnJvbSAnLi9hZGQtYnV0dG9uJztcclxuXHJcbi8qKlxyXG4gKiBBZGQgYnV0dG9uIHRvIHNlY3Rpb24gdG8gdmlldyB0aGUgUHJpdmFjeSBTdGF0ZW1lbnQgbW9kYWwuXHJcbiAqIE5COiAjcHJpdk1vZGFsIGlzIGRlZmluZWQgaW4gdGhlIHdlYiB0ZW1wbGF0ZSBcIlBITyBQYWdlIFRlbXBsYXRlXCIuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYWRkUHJpdmFjeVN0YXRlbWVudEJ1dHRvbiA9ICgpOiB2b2lkID0+IHtcclxuICBjb25zdCBidXR0b25JZDogc3RyaW5nID0gJ3ByaXZhY3ktc3RhdGVtZW50LWJ1dHRvbic7XHJcblxyXG4gIGFkZEJ1dHRvblRvU2VjdGlvbigncHJpdmFjeSBzdGF0ZW1lbnQnLCBidXR0b25JZCwgJ1ZpZXcgcHJpdmFjeSBzdGF0ZW1lbnQnKTtcclxuICAkKGAjJHtidXR0b25JZH1gKS5hdHRyKCdkYXRhLXRvZ2dsZScsICdtb2RhbCcpO1xyXG4gICQoYCMke2J1dHRvbklkfWApLmF0dHIoJ2RhdGEtdGFyZ2V0JywgJyNwcml2TW9kYWwnKTtcclxufTtcclxuIiwiLyoqXHJcbiAqIFNldHMgbGFiZWwgZm9yIHN0YXR1dG9yeSBkZWNsYXJhdGlvbiBjaGVja2JveCB0byBoYXZlIGFuIGFuY2hvclxyXG4gKiBmb3IgdGhlIFBITyBzdGF0dXRvcnkgZGVjbGFyYXRpb24uXHJcbiAqL1xyXG5leHBvcnQgY29uc3Qgc2V0U3RhdHV0b3J5TGFiZWwgPSAoKTogdm9pZCA9PiB7XHJcbiAgY29uc3Qgc3RhdHV0b3J5TGFiZWxJZCA9ICdrYm56X3N0YXR1dG9yeWRlY2xhcmF0aW9ucGhvX2xhYmVsJztcclxuICBjb25zdCBsYWJlbFByb2xvZ3VlID0gYGA7XHJcblxyXG4gICQoYCMke3N0YXR1dG9yeUxhYmVsSWR9YCkudGV4dChsYWJlbFByb2xvZ3VlKTtcclxuICAkKGAjJHtzdGF0dXRvcnlMYWJlbElkfWApLnByZXBlbmQoXHJcbiAgICAnPGEgaHJlZj1cIi9zdGF0ZGVjXCIgdGFyZ2V0PVwiX2JsYW5rXCI+Rmlyc3QgSG9tZSBQYXJ0bmVyIFN0YXR1dG9yeSBEZWNsYXJhdGlvbjwvYT4nXHJcbiAgKTtcclxufTtcclxuIiwiaW1wb3J0IHsgaW5jb21lSWQsIG90aGVySW5jb21lSWQgfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IGluaXRYcm1Qb3J0YWwgfSBmcm9tICcuL2xvYWQteHJtJztcclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXNlcyB0aGUgc3VtIG9mIGFubnVhbCBpbmNvbWUgZm9yIC9waG9lbGlnaWJpbGl0eS5cclxuICovXHJcbmV4cG9ydCBjb25zdCBtYW5hZ2VFZGl0SW5jb21lID0gKCk6IHZvaWQgPT4ge1xyXG4gIGdldEluY29tZXNFZGl0KCk7XHJcbiAgWHJtLlBvcnRhbC5Gb3JtLmdldCgnU291cmNlT2ZJbmNvbWUnKS5hdHRhY2hPbkNoYW5nZShnZXRJbmNvbWVzRWRpdCk7XHJcbn07XHJcblxyXG4vKipcclxuICogU3VtcyB0aGUgYW5udWFsIGluY29tZSB3aGVuIGEgY29udGFjdCBpcyBiZWluZyBlZGl0ZWQuXHJcbiAqL1xyXG5jb25zdCBnZXRJbmNvbWVzRWRpdCA9ICgpOiB2b2lkID0+IHtcclxuICBjb25zdCBxdWVyeVN0cmluZzogc3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcclxuICBjb25zdCB1cmxQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gIGNvbnN0IGNvbnRhY3RJZDogc3RyaW5nID0gdXJsUGFyYW1zLmdldCgnaWQnKSE7XHJcbiAgbWFrZUluY29tZVJlcXVlc3QoY29udGFjdElkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXNlcyB0aGUgc3VtIG9mIGFubnVhbCBpbmNvbWUgZm9yIC9waG9hZGRpdGlvbmFsYXBwbGljYW50LlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG1hbmFnZUluc2VydEluY29tZSA9ICgpOiB2b2lkID0+IHtcclxuICBnZXRJbmNvbWVzSW5zZXJ0KCk7XHJcbiAgWHJtLlBvcnRhbC5Gb3JtLmdldCgnU291cmNlT2ZJbmNvbWUnKS5hdHRhY2hPbkNoYW5nZShnZXRJbmNvbWVzSW5zZXJ0KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdW1zIHRoZSBhbm51YWwgaW5jb21lIHdoZW4gYSBjb250YWN0IGlzIGJlaW5nIGluc2VydGVkLlxyXG4gKi9cclxuY29uc3QgZ2V0SW5jb21lc0luc2VydCA9ICgpOiB2b2lkID0+IHtcclxuICBjb25zdCBjb250YWN0SWQ6IHN0cmluZyA9ICQoJyNFbnRpdHlGb3JtVmlld19FbnRpdHlJRCcpLnZhbCgpIGFzIHN0cmluZztcclxuICBtYWtlSW5jb21lUmVxdWVzdChjb250YWN0SWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE1ha2VzIGFuIG9EYXRhIHJlcXVlc3QgdG8gZ2V0IGFsbCBzb3VyY2VzIG9mIGluY29tZSBmb3IgdGhlIGNvbnRhY3QgYW5kIHN1bSBhbmQgc2V0IHRoZW0gaW4gdGhlIHRvdGFsIGFubnVhbCBpbmNvbWUgZmllbGQuXHJcbiAqIEBwYXJhbSBjb250YWN0SWQgVGhlIGd1aWQgb2YgdGhlIGNvbnRhY3QuXHJcbiAqL1xyXG5jb25zdCBtYWtlSW5jb21lUmVxdWVzdCA9IChjb250YWN0SWQ6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gIGNvbnN0IGluY29tZVVybDogc3RyaW5nID0gZW5jb2RlVVJJKGB+L19vZGF0YS9rYm56X3NvdXJjZXNvZmluY29tZXM/JGZpbHRlcj1rYm56X2NvbnRhY3QvSWQgZXEgKGd1aWQnJHtjb250YWN0SWR9JylgKTtcclxuICBsZXQgaW5jb21lU3VtOiBudW1iZXIgPSAwLjA7XHJcblxyXG4gICQuYWpheCh7XHJcbiAgICB0eXBlOiAnR0VUJyxcclxuICAgIHVybDogaW5jb21lVXJsLFxyXG4gICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpbmNvbWVTdW0gKz0gcGFyc2VGbG9hdChyZXN1bHQudmFsdWVbaV1bJ2tibnpfYW1vdW50J10pO1xyXG4gICAgICB9XHJcbiAgICAgIFhybS5Qb3J0YWwuRm9ybS5nZXQoJ2FubnVhbGluY29tZScpLnNldFZhbHVlKGAkJHtpbmNvbWVTdW0udG9GaXhlZCgyKX1gKTtcclxuICAgIH0sXHJcbiAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQmluZCBoYW5kbGVyIHRvIGlmcmFtZSBpbiBtb2RhbCB0byBtYW5hZ2UgdGhlIEluY29tZSBPdGhlciBzb3VyY2UgZmllbGQuXHJcbiAqIE5COiBUaGVzZSBmaWVsZHMgYXJlIGluIGFuIGlmcmFtZSB3aGljaCBpcyBpdHMgb3duIGRvY3VtZW50LlxyXG4gKiBOQjogWHJtIFBvcnRhbCBzY3JpcHQgaXMgYm91bmQgdG8gaWZyYW1lIG9uIEJhc2ljIEZvcm06IFwiUEhPIC0gU291cmNlcyBvZiBJbmNvbWVcIlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGluaXRTb3VyY2VPZkluY29tZSA9ICgpID0+IHtcclxuICBpbml0WHJtUG9ydGFsKGluaXRTb3VyY2VPZkluY29tZXMpO1xyXG4gIGZ1bmN0aW9uIGluaXRTb3VyY2VPZkluY29tZXMoKSB7XHJcbiAgICBYcm0uUG9ydGFsLkZvcm0uZ2V0KGluY29tZUlkKS5hdHRhY2hPbkNoYW5nZShtYW5hZ2VTb3VyY2VPZkluY29tZXMpO1xyXG4gICAgbWFuYWdlU291cmNlT2ZJbmNvbWVzKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBtYW5hZ2VTb3VyY2VPZkluY29tZXMoKSB7XHJcbiAgICBpZiAoWHJtLlBvcnRhbC5Gb3JtLmdldChpbmNvbWVJZCkuZ2V0VmFsdWUoKSA9PT0gJzk3Mzc3MDAwOCcpIHtcclxuICAgICAgLy8gT3RoZXIgaXMgc2VsZWN0ZWRcclxuICAgICAgJChgIyR7b3RoZXJJbmNvbWVJZH1gKS5jbG9zZXN0KCd0cicpLnNob3coKTtcclxuICAgICAgWHJtLlBvcnRhbC5Gb3JtLmdldChvdGhlckluY29tZUlkKS5zZXRSZXF1aXJlZCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICQoYCMke290aGVySW5jb21lSWR9YCkuY2xvc2VzdCgndHInKS5oaWRlKCk7XHJcbiAgICAgIFhybS5Qb3J0YWwuRm9ybS5nZXQob3RoZXJJbmNvbWVJZCkuc2V0UmVxdWlyZWQoZmFsc2UpO1xyXG4gICAgICBYcm0uUG9ydGFsLkZvcm0uZ2V0KG90aGVySW5jb21lSWQpLnNldFZhbHVlKCcnKTtcclxuICAgIH1cclxuICB9XHJcbn07XHJcbiIsImltcG9ydCB7IGFzc2V0RmllbGRJZHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcblxyXG4vKipcclxuICogTWFuYWdlcyBzdW1taW5nIGFzc2V0cyBhbmQgc2V0dGluZyB0aGlzIHZhbHVlIHRvIHRoZSB2YWx1ZSBvZiB0aGUgJ1RvdGFsIEFzc2V0cycgZmllbGQuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgbWFuYWdlQXNzZXRUb3RhbCA9ICgpOiB2b2lkID0+IHtcclxuICBmb3IgKGNvbnN0IGFzc2V0SWQgb2YgYXNzZXRGaWVsZElkcykge1xyXG4gICAgWHJtLlBvcnRhbC5Gb3JtLmdldChhc3NldElkKS5hdHRhY2hPbkNoYW5nZShzdW1Bc3NldHMpO1xyXG4gIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdW1zIHByaW1hcnkgYXBwbGljYW50J3MgYXNzZXRzIGFuZCBzZXRzIHRoZSB0b3RhbCB0byB0aGlzIHN1bS5cclxuICovXHJcbmNvbnN0IHN1bUFzc2V0cyA9ICgpOiB2b2lkID0+IHtcclxuICBsZXQgdG90YWw6IG51bWJlciA9IDAuMDtcclxuICBsZXQgdG90YWxBc3NldElkOiBzdHJpbmcgPSAna2Juel90b3RhbGFzc2V0cyc7XHJcblxyXG4gIGZvciAoY29uc3QgYXNzZXRJZCBvZiBhc3NldEZpZWxkSWRzKSB7XHJcbiAgICBjb25zdCBudW06IHN0cmluZyA9IFhybS5Qb3J0YWwuRm9ybS5nZXQoYXNzZXRJZCkuZ2V0VmFsdWUoKTtcclxuICAgIGNvbnN0IG51bVN0cmluZzogc3RyaW5nID0gbnVtLnJlcGxhY2UoL1ssXSsvZywgJycpOyAvLyBSZW1vdmUgY29tbWFzXHJcbiAgICBpZiAoaXNOdW1lcmljKG51bVN0cmluZykpIHtcclxuICAgICAgLy8gVmFsdWUgaXMgYSBudW1iZXIgKHBvc3NpYmxlIHVzZXIgaGFzIG5vdCBlbnRlcmVkIGEgdmFsaWQgbnVtYmVyIHRvIGZyb250IGVuZClcclxuICAgICAgdG90YWwgKz0gcGFyc2VGbG9hdChudW1TdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb25zdCB0b3RhbFN0cmluZyA9IG51bWJlcldpdGhDb21tYXModG90YWwudG9GaXhlZCgyKSk7XHJcbiAgWHJtLlBvcnRhbC5Gb3JtLmdldCh0b3RhbEFzc2V0SWQpLnNldFZhbHVlKGAkJHt0b3RhbFN0cmluZ31gKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZXMgd2hldGhlciBhIHN0cmluZyBpbnB1dCBpcyBhIHZhbGlkIG51bWJlclxyXG4gKiBAcGFyYW0gbnVtU3RyaW5nIFN0cmluZyBvZiBpbnB1dCB0byBjaGVja1xyXG4gKiBAcmV0dXJucyBUcnVlIGlmIG51bWJlciBpcyBub3QgTmFOIG9yIGVtcHR5XHJcbiAqL1xyXG5jb25zdCBpc051bWVyaWMgPSAobnVtU3RyaW5nOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gIWlzTmFOKG51bVN0cmluZyBhcyBhbnkpICYmIG51bVN0cmluZyAhPT0gJyc7XHJcbn07XHJcblxyXG5jb25zdCBudW1iZXJXaXRoQ29tbWFzID0gKG51bTogc3RyaW5nKSA9PiB7XHJcbiAgcmV0dXJuIG51bS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpO1xyXG59O1xyXG4iLCIvKipcclxuICogSGlkZXMgYW5kIGFzc2VydHMgb24gZmxhZyB0aGF0IGFzc2Vzc2VzIHdoZXRoZXIgYXBwbGljYW50IGhhcyBleGlzdGluZyB2YWxpZCBLQiBkb2N1bWVudGF0aW9uLlxyXG4gKiBJZiB0aGV5IGRvLCBkaXNwbGF5IHRoZSBvcHRpb24gdG8gY2hlY2sgdGhhdCB0aGV5IHdhbnQgdG8gdXNlIHRoaXMgZG9jdW1lbnRhdGlvbiBpbiB0aGVpciBhcHBsaWNhdGlvbi5cclxuICovXHJcbmV4cG9ydCBjb25zdCBtYW5hZ2VVc2VFeGlzdGluZ0RvY3VtZW50cyA9ICgpOiB2b2lkID0+IHtcclxuICBjb25zdCBtZXRhZGF0YUlkID0gJ2tibnpfdXNlX2tibnpfZG9jdW1lbnRzJztcclxuICBjb25zdCBjaGVja2JveElkID0gJ2tibnpfdXNlZXhpc3RpbmcnO1xyXG5cclxuICAvLyBIaWRlIG1ldGFkYXRhIGNlbGxcclxuICAkKGAjJHttZXRhZGF0YUlkfWApLmNsb3Nlc3QoJ3RyJykuaGlkZSgpO1xyXG4gIGNvbnN0IHVzZUV4aXN0aW5nSXNWaXNpYmxlID0gWHJtLlBvcnRhbC5Gb3JtLmdldChtZXRhZGF0YUlkKS5nZXRWYWx1ZSgpO1xyXG5cclxuICBpZiAodXNlRXhpc3RpbmdJc1Zpc2libGUgPT09IGZhbHNlKSB7XHJcbiAgICAvLyBIaWRlIGNoZWNrYm94IGNlbGxcclxuICAgICQoYCMke2NoZWNrYm94SWR9YCkuY2xvc2VzdCgndHInKS5oaWRlKCk7XHJcbiAgfVxyXG59O1xyXG4iLCJpbXBvcnQgeyBhcHBsaWNhdGlvblN0YXRlcyBhcyBhIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IG1hbmFnZUFwcGxpY2F0aW9uQnV0dG9ucyA9ICgpID0+IHtcclxuICBjb25zdCBzdGF0dXNJZCA9ICdzdGF0dXNjb2RlX0VudGl0eVN0YXR1cyc7XHJcbiAgY29uc3Qgc3RhdHVzTnVtID0gWHJtLlBvcnRhbC5Gb3JtLmdldChzdGF0dXNJZCkuZ2V0VmFsdWUoKS5pZDtcclxuICBtYW5hZ2VTdWJtaXRCdXR0b24oc3RhdHVzTnVtKTtcclxuICBtYW5hZ2VXaXRoZHJhd0J1dHRvbihzdGF0dXNOdW0pO1xyXG4gIG1hbmFnZUFjdGl2YXRlQnV0dG9uKHN0YXR1c051bSk7XHJcbn07XHJcblxyXG4vKipcclxuICogU3VibWl0IGJ1dHRvbiBpcyBhdmFpbGFibGUgd2hlbiB0aGUgYXBwbGljYXRpb24gc3RhdHVzIGlzIGRyYWZ0IG9yIG1vcmUgaW5mb3JtYXRpb24gcmVxdWlyZWQuXHJcbiAqIEBwYXJhbSBzdGF0dXNOdW0gVmFsdWUgb2YgYXBwbGljYXRpb24gc3RhdHVzXHJcbiAqL1xyXG5jb25zdCBtYW5hZ2VTdWJtaXRCdXR0b24gPSAoc3RhdHVzTnVtOiBzdHJpbmcpID0+IHtcclxuICBjb25zdCBidXR0b24gPSAkKGBpbnB1dFt0aXRsZT1cIlN1Ym1pdFwiXWApO1xyXG4gIHN3aXRjaCAoc3RhdHVzTnVtKSB7XHJcbiAgICBjYXNlIGEuZHJhZnQ6XHJcbiAgICBjYXNlIGEubW9yZUluZm86XHJcbiAgICAgIC8vIEJ1dHRvbnMgc2hvdyBpbiBVSSBieSBkZWZhdWx0XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgYnV0dG9uLmhpZGUoKTtcclxuICB9XHJcbn07XHJcblxyXG4vKipcclxuICogV2l0aGRyYXcgYnV0dG9uIGlzIGF2YWlsYWJsZSB3aGVuIHN0YXR1cyBpcyBOT1Qgd2l0aGRyYXduLCBhcHByb3ZlZCwgZHJhZnQsIGV4cGlyZWQgb3IgaW5hY3RpdmUuXHJcbiAqIEBwYXJhbSBzdGF0dXNOdW0gVmFsdWUgb2YgYXBwbGljYXRpb24gc3RhdHVzXHJcbiAqL1xyXG5jb25zdCBtYW5hZ2VXaXRoZHJhd0J1dHRvbiA9IChzdGF0dXNOdW06IHN0cmluZykgPT4ge1xyXG4gIGNvbnN0IGJ1dHRvbiA9ICQoYGJ1dHRvbltkYXRhLW1vZGFsLXRpdGxlPVwiV2l0aGRyYXcgYXBwbGljYXRpb25cIl1gKTtcclxuICBzd2l0Y2ggKHN0YXR1c051bSkge1xyXG4gICAgY2FzZSBhLndpdGhkcmF3bjpcclxuICAgIGNhc2UgYS5hcHByb3ZlZDpcclxuICAgIGNhc2UgYS5hcHByb3ZlZEluYWN0aXZlOlxyXG4gICAgY2FzZSBhLmRyYWZ0OlxyXG4gICAgY2FzZSBhLmV4cGlyZWQ6XHJcbiAgICBjYXNlIGEuaW5hY3RpdmU6XHJcbiAgICAgIGJ1dHRvbi5oaWRlKCk7XHJcbiAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFjdGl2YXRlIGJ1dHRvbiBpcyB2aXNpYmxlIHdoZW4gYXBwbGljYXRpb24gc3RhdHVzIGlzIHdpdGhkcmF3bi5cclxuICogQHBhcmFtIHN0YXR1c051bSBWYWx1ZSBvZiBhcHBsaWNhdGlvbiBzdGF0dXNcclxuICovXHJcbmNvbnN0IG1hbmFnZUFjdGl2YXRlQnV0dG9uID0gKHN0YXR1c051bTogc3RyaW5nKSA9PiB7XHJcbiAgY29uc3QgYnV0dG9uID0gJChgYnV0dG9uW2RhdGEtbW9kYWwtdGl0bGU9XCJBY3RpdmF0ZSBhcHBsaWNhdGlvblwiXWApO1xyXG4gIHN3aXRjaCAoc3RhdHVzTnVtKSB7XHJcbiAgICBjYXNlIGEud2l0aGRyYXduOlxyXG4gICAgICBicmVhaztcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIGJ1dHRvbi5oaWRlKCk7XHJcbiAgfVxyXG59O1xyXG4iLCIvKipcclxuICogVGFrZXMgZGVmYXVsdCBwb3J0YWwgc3VibWlzc2lvbiBhY3Rpb25zLCBjYWxscyBpdCBhbmQgdGhlbiBjYWxscyBjdXN0b20gZnVuY3Rpb25hbGl0eS5cclxuICogQXV0aG9yOiBDbGl2ZSBPbGRyaWRnZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG1hbmFnZUVycm9ycyA9ICgpOiB2b2lkID0+IHtcclxuICBpZiAoJCgnYm9keSA+IGRpdi5hbGVydC5hbGVydC1ibG9jay5hbGVydC1kYW5nZXInKS5sZW5ndGggPT09IDEpIHtcclxuICAgICQoJ2JvZHkgPiBkaXYuYWxlcnQuYWxlcnQtYmxvY2suYWxlcnQtZGFuZ2VyJykuaGlkZSgpO1xyXG4gICAgc2hvd0dlbmVyaWNFcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCQoJyNNZXNzYWdlUGFuZWwnKS5sZW5ndGggPT09IDEgJiYgISQoJyNNZXNzYWdlUGFuZWwnKS5oYXNDbGFzcygnc3VjY2VzcycpKSB7XHJcbiAgICAkKCcjTWVzc2FnZVBhbmVsJykuaGlkZSgpO1xyXG4gICAgc2hvd0dlbmVyaWNFcnJvcigpO1xyXG4gIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93IGdlbmVyaWMgZXJyb3IgZGVmaW5lZCBpbiBwb3J0YWwgY29udGVudCBzbmlwcGV0LlxyXG4gKi9cclxuY29uc3Qgc2hvd0dlbmVyaWNFcnJvciA9ICgpOiB2b2lkID0+IHtcclxuICAvLyBFcnJvciBtZXNzYWdlIEhUTUwgZGVmaW5lZCBpbiBhIHBvcnRhbCBzbmlwcGV0IGFuZCBwb3B1bGF0ZWQgaW4gZm9vdGVyXHJcbiAgJCgnLnZhbGlkYXRpb24tc3VtbWFyeScpLmh0bWwoJCgnI2dlbmVyaWMtZXJyb3ItbWVzc2FnZScpLmh0bWwoKSk7XHJcbiAgJCgnLnZhbGlkYXRpb24tc3VtbWFyeScpLnNob3coKTtcclxufTtcclxuIiwiaW1wb3J0IHsgZmllbGRSdWxlc1VybCB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuXHJcbi8qKlxyXG4gKiBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEgcmV0dXJuZWQgZnJvbSAnRmllbGQgU2V0dGluZ3MnIGN1c3RvbVxyXG4gKiBlbnRpdHkgT0RhdGEgcmVxdWVzdC5cclxuICovXHJcbmludGVyZmFjZSBIZWxwSnNvbiB7XHJcbiAga2Juel90b2dnbGVlbGVtZW50aWQ6IHN0cmluZztcclxuICBrYm56X2VsZW1lbnRpZHRvY2hhbmdlOiBzdHJpbmc7XHJcbiAga2Juel9zaG93d2hlbnRvZ2dsZWVsZW1lbnR2YWx1ZWlzOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYW5hZ2VzIHRoZSB2aXNpYmlsaXR5IG9mIHNlY3Rpb25zIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgeWVzLyBubyBmaWVsZC5cclxuICogRmllbGQgYW5kIHNlY3Rpb24gSURzIGJyb3VnaHQgaW4gZnJvbSBwb3J0YWwgd2ViIGZpbGUuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgbWFuYWdlU2VjdGlvblZpc2liaWxpdHkgPSAoKSA9PiB7XHJcbiAgJC5hamF4KHtcclxuICAgIHR5cGU6ICdHRVQnLFxyXG4gICAgdXJsOiBmaWVsZFJ1bGVzVXJsLFxyXG4gICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgY29uc3QgZmllbGRfcnVsZXM6IEFycmF5PEhlbHBKc29uPiA9IHJlc3VsdC52YWx1ZTtcclxuICAgICAgZm9yIChsZXQgZmllbGRfcnVsZSBvZiBmaWVsZF9ydWxlcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IGZpZWxkX3J1bGUua2Juel90b2dnbGVlbGVtZW50aWQ7XHJcbiAgICAgICAgY29uc3QgZmllbGQgPSBYcm0uUG9ydGFsLkZvcm0uZ2V0KGVsZW1lbnRJZCk7XHJcbiAgICAgICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgICAgICAkKGB0YWJsZVtkYXRhLW5hbWU9JyR7ZmllbGRfcnVsZS5rYm56X2VsZW1lbnRpZHRvY2hhbmdlfSddYClcclxuICAgICAgICAgICAgLmNsb3Nlc3QoJ2ZpZWxkc2V0JylcclxuICAgICAgICAgICAgLmFkZENsYXNzKCdjb2xsYXBzaWJsZS1zZWN0aW9uJyk7XHJcbiAgICAgICAgICBmaWVsZC5hdHRhY2hPbkNoYW5nZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNoYW5nZVNlY3Rpb25WaXNpYmlsaXR5KFxyXG4gICAgICAgICAgICAgIGZpZWxkX3J1bGUua2Juel90b2dnbGVlbGVtZW50aWQsXHJcbiAgICAgICAgICAgICAgZmllbGRfcnVsZS5rYm56X2VsZW1lbnRpZHRvY2hhbmdlLFxyXG4gICAgICAgICAgICAgIGZpZWxkX3J1bGUua2Juel9zaG93d2hlbnRvZ2dsZWVsZW1lbnR2YWx1ZWlzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIEZpZWxkIHNob3dzIGFzIFwiMVwiIG9yIFwiMFwiIGZvciB0cnVlIG9yIGZhbHNlXHJcbiAgICAgICAgICBjb25zdCBpc1Nob3duID1cclxuICAgICAgICAgICAgZmllbGQuZ2V0VmFsdWUoKSA9PT0gZmllbGRfcnVsZS5rYm56X3Nob3d3aGVudG9nZ2xlZWxlbWVudHZhbHVlaXNcclxuICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCFpc1Nob3duKSB7XHJcbiAgICAgICAgICAgIHRvZ2dsZVNlY3Rpb24oZmFsc2UsIGZpZWxkX3J1bGUua2Juel9lbGVtZW50aWR0b2NoYW5nZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZXJyb3I6IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihyZXN1bHQpO1xyXG4gICAgfSxcclxuICB9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBPbiBjaGFuZ2UgaGFuZGxlciBmb3IgeWVzLyBubyBmaWVsZHMgdGhhdCBtYW5hZ2Ugc2VjdGlvbiB2aXNpYmlsaXR5LlxyXG4gKiBAcGFyYW0gZmllbGRJZCBJRCBvZiB0aGUgeWVzLyBubyBmaWVsZC5cclxuICogQHBhcmFtIHNlY3Rpb25JZCBUaGUgSUQgb2YgdGhlIHNlY3Rpb24gdG8gbWFuYWdlLlxyXG4gKi9cclxuY29uc3QgY2hhbmdlU2VjdGlvblZpc2liaWxpdHkgPSAoXHJcbiAgZmllbGRJZDogc3RyaW5nLFxyXG4gIHNlY3Rpb25JZDogc3RyaW5nLFxyXG4gIGNoYW5nZVdoZW5Ub2dnbGVJczogc3RyaW5nXHJcbikgPT4ge1xyXG4gIGNvbnN0IGlzU2hvd24gPVxyXG4gICAgWHJtLlBvcnRhbC5Gb3JtLmdldChmaWVsZElkKS5nZXRWYWx1ZSgpID09PSBjaGFuZ2VXaGVuVG9nZ2xlSXNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcbiAgdG9nZ2xlU2VjdGlvbihpc1Nob3duLCBzZWN0aW9uSWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIG9yIGhpZGVzIGEgZ2l2ZW4gc2VjdGlvbi5cclxuICogQHBhcmFtIGlzVmlzaWJsZSBXaGV0aGVyIHRoZSBzZWN0aW9uIHNob3VsZCBiZSB2aXNpYmxlLlxyXG4gKiBAcGFyYW0gc2VjdGlvbklkIFRoZSBJRCBvZiB0aGUgc2VjdGlvbi5cclxuICovXHJcbmNvbnN0IHRvZ2dsZVNlY3Rpb24gPSAoaXNWaXNpYmxlOiBib29sZWFuLCBzZWN0aW9uSWQ6IHN0cmluZykgPT4ge1xyXG4gIGNvbnN0IG9wZW5DbGFzc05hbWUgPSAnb3Blbic7XHJcbiAgaXNWaXNpYmxlXHJcbiAgICA/ICQoYHRhYmxlW2RhdGEtbmFtZT0nJHtzZWN0aW9uSWR9J11gKVxyXG4gICAgICAgIC5jbG9zZXN0KCdmaWVsZHNldCcpXHJcbiAgICAgICAgLmFkZENsYXNzKG9wZW5DbGFzc05hbWUpXHJcbiAgICA6ICQoYHRhYmxlW2RhdGEtbmFtZT0nJHtzZWN0aW9uSWR9J11gKVxyXG4gICAgICAgIC5jbG9zZXN0KCdmaWVsZHNldCcpXHJcbiAgICAgICAgLnJlbW92ZUNsYXNzKG9wZW5DbGFzc05hbWUpO1xyXG59OyIsIi8qKlxyXG4gKiAgVXNlZCB0byBpbml0aWFsaXplIHRoZSBwYWdlIHRvIGRvIGNvbW1vbiBwYWdlIGVsZW1lbnQgY3VzdG9taXphdGlvbi5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQYWdlKCkge1xyXG4gICQoJy5zaXRlLWNvbnRhaW5lcicpLmZhZGVJbignc2xvdycpO1xyXG4gICQoJy5sb2FkaW5nJykuaGlkZSgpO1xyXG4gICQoJyNsb2FkaW5nLWFsZXJ0JykuYXR0cignYXJpYS1idXN5JywgJ2ZhbHNlJyk7XHJcbn1cclxuIiwiaW1wb3J0IHsgbG9jYXRpb25QcmVmZXJlbmNlSWRzLCBsb2NhdGlvbklkcyB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuXHJcbi8qKlxyXG4gKiBCaW5kIG9uIGNoYW5nZSBmdW5jdGlvbiB0byBmaWx0ZXIgcHJpbWFyeS8gc2Vjb25kYXJ5IGxvY2F0aW9uIG9wdGlvbnNcclxuICogYmFzZWQgb24gd2hhdCBpcyBzZWxlY3RlZC5cclxuICovXHJcbmV4cG9ydCBjb25zdCBtYW5hZ2VMb2NhdGlvbnMgPSAoKTogdm9pZCA9PiB7XHJcbiAgZm9yIChsZXQgZWxlbWVudCBvZiBsb2NhdGlvblByZWZlcmVuY2VJZHMpIHtcclxuICAgIFhybS5Qb3J0YWwuRm9ybS5nZXQoZWxlbWVudCkuYXR0YWNoT25DaGFuZ2UobWFuYWdlTG9jYXRpb25QcmVmZXJlbmNlcyk7XHJcbiAgfVxyXG4gIG1hbmFnZUxvY2F0aW9uUHJlZmVyZW5jZXMoKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBXaGVuIGEgbG9jYXRpb24gcHJlZmVyZW5jZSBpcyBzZWxlY3RlZCwgdGhpcyBvcHRpb24gaXMgcmVtb3ZlZCBmcm9tIHRoZSBvdGhlciBmaWVsZHMuXHJcbiAqL1xyXG5jb25zdCBtYW5hZ2VMb2NhdGlvblByZWZlcmVuY2VzID0gKCk6IHZvaWQgPT4ge1xyXG4gIC8vIE5lZWQgdG8gYWRkIGJhY2sgYWxsIHRoZSBvcHRpb25zIGF0IHN0YXJ0XHJcbiAgZm9yIChjb25zdCBbXywgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGxvY2F0aW9uSWRzKSkge1xyXG4gICAgZm9yIChsZXQgZWxlbWVudCBvZiBsb2NhdGlvblByZWZlcmVuY2VJZHMpIHtcclxuICAgICAgJChgIyR7ZWxlbWVudH0gb3B0aW9uW3ZhbHVlPScke3ZhbHVlfSddYCkuc2hvdygpO1xyXG4gICAgICAkKGAjJHtlbGVtZW50fSBvcHRpb25bdmFsdWU9JyR7dmFsdWV9J11gKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGV0IHZhbHVlcyA9IFtdO1xyXG4gIGZvciAobGV0IGVsZW1lbnQgb2YgbG9jYXRpb25QcmVmZXJlbmNlSWRzKSB7XHJcbiAgICB2YWx1ZXMucHVzaChYcm0uUG9ydGFsLkZvcm0uZ2V0KGVsZW1lbnQpLmdldFZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgbGV0IHNob3dPdGhlciA9IGZhbHNlO1xyXG4gIGlmICh2YWx1ZXMuaW5jbHVkZXMobG9jYXRpb25QcmVmZXJlbmNlSWRzKSkge1xyXG4gICAgc2hvd090aGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gJycpIHtcclxuICAgICAgbG9jYXRpb25QcmVmZXJlbmNlSWRzLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4Mikge1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gaW5kZXgyKSB7XHJcbiAgICAgICAgICAvLyBOb3QgZ29pbmcgdG8gaGlkZSBpdGVtIGluIG93biBkcm9wZG93blxyXG4gICAgICAgICAgJChgIyR7ZWxlbWVudH0gb3B0aW9uW3ZhbHVlPScke3ZhbHVlfSddYCkuaGlkZSgpO1xyXG4gICAgICAgICAgJChgIyR7ZWxlbWVudH0gb3B0aW9uW3ZhbHVlPScke3ZhbHVlfSddYCkuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG4iLCIvKipcclxuICogRGlzYWJsZSBhYmlsaXR5IGZvciBwcmltYXJ5IGFwcGxpY2FudHMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzdWJncmlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZGlzYWJsZVJlbW92ZVByaW1hcnlDb250YWN0ID0gKCkgPT4ge1xyXG4gIGNvbnN0IHByaW1hcnlHdWlkID0gWHJtLlBvcnRhbC5Gb3JtLmdldCgna2Juel9wb2ludG9mY29udGFjdCcpLmdldFZhbHVlKCkuaWQ7XHJcbiAgJCgnI0FwcGxpY2FudHMgPiAuZW50aXR5LWdyaWQuc3ViZ3JpZCcpLm9uKCdsb2FkZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAkKGB0cltkYXRhLWlkPVwiJHtwcmltYXJ5R3VpZH1cIl0gYVt0aXRsZT1cIlJlbW92ZVwiXWApLmhpZGUoKTtcclxuICB9KTtcclxufTtcclxuIiwiLyoqXHJcbiAqIEJpbmQgaGFuZGxlciB0byBpZnJhbWUgaW4gbW9kYWwgdG8gbWFuYWdlIGJpcnRoZGF0ZXMgd2hlbiBhZGRpbmcgZGVwZW5kZW50cy5cclxuICogTkI6IFRoZXNlIGZpZWxkcyBhcmUgaW4gYW4gaWZyYW1lIHdoaWNoIGlzIGl0cyBvd24gZG9jdW1lbnQuXHJcbiAqIE5COiBYcm0gUG9ydGFsIHNjcmlwdCBpcyBib3VuZCB0byBpZnJhbWUgb24gQmFzaWMgRm9ybTogXCJQSE8gLSBTb3VyY2VzIG9mIEluY29tZVwiXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgbWFuYWdlRGVwZW5kZW50QmlydGhkYXRlID0gKCkgPT4ge1xyXG4gIGNvbnNvbGUubG9nKCdtYW5hZ2luZyBkZXBlbmRlbnQgYmRheScpO1xyXG4gIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICBzY3JpcHQuc3JjID0gJy94cm1wb3J0YWxzY3JpcHQuanMnO1xyXG4gIGNvbnNvbGUubG9nKCdzb3VyY2UgaXMgOiAnICsgc2NyaXB0LnNyYyk7XHJcbiAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcclxuICBzY3JpcHQub25sb2FkID0gaW5pdE1hbmFnZUJpcnRoZGF5O1xyXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuXHJcbiAgZnVuY3Rpb24gaW5pdE1hbmFnZUJpcnRoZGF5KCkge1xyXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gJ0RhdGUgb2YgYmlydGggY2Fubm90IGJlIGEgZnV0dXJlIGRhdGUuJztcclxuICAgIGNvbnN0IGJpcnRoZGF0ZUlkID0gJ2tibnpfZGF0ZW9mYmlydGgnO1xyXG4gICAgWHJtLlBvcnRhbC5Gb3JtLlZhbGlkYXRpb24uZGVueUZ1dHVyZURhdGUoYmlydGhkYXRlSWQsIGVycm9yTWVzc2FnZSk7XHJcbiAgfVxyXG59O1xyXG4iLCIvKipcclxuICogQWRkcyBhIGJ1dHRvbiB0byBhIHNlY3Rpb24uXHJcbiAqIEBwYXJhbSBzZWN0aW9uVGl0bGUgVGhlIHRpdGxlIG9mIHRoZSBzZWN0aW9uIHRvIGFkZCB0aGUgYnV0dG9uIHRvLlxyXG4gKiBAcGFyYW0gc2VjdGlvbkRlc2NyaXB0aW9uSHRtbCBUaGUgSFRNTCBkZXNjcmlwdGlvbiB0ZXh0IHRvIGJlIGFkZGVkIHRvIHRoZSBzZWN0aW9uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYWRkRGVzY3JpcHRpb25Ub1NlY3Rpb24gPSAoXHJcbiAgc2VjdGlvblRpdGxlOiBzdHJpbmcsXHJcbiAgc2VjdGlvbkRlc2NyaXB0aW9uSHRtbDogc3RyaW5nXHJcbik6IHZvaWQgPT4ge1xyXG4gIGNvbnN0IHNlY3Rpb25zOiBKUXVlcnk8SFRNTEVsZW1lbnQ+ID0gJChcImxlZ2VuZC5zZWN0aW9uLXRpdGxlXCIpO1xyXG5cclxuICBsZXQgc2VjdGlvbjogYW55O1xyXG4gIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgaWYgKFxyXG4gICAgICBzZWN0aW9uc1tpXS5pbm5lckhUTUwudG9Mb3dlckNhc2UoKSA9PSBgJHtzZWN0aW9uVGl0bGV9YC50b0xvd2VyQ2FzZSgpXHJcbiAgICApIHtcclxuICAgICAgc2VjdGlvbiA9IHNlY3Rpb25zW2ldO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKHNlY3Rpb24pIHtcclxuICAgICQoc2VjdGlvbikuYWZ0ZXIoc2VjdGlvbkRlc2NyaXB0aW9uSHRtbCk7XHJcbiAgfVxyXG59O1xyXG4iLCJcclxuLyoqXHJcbiAqIE1ha2VzIHNvbGljaXRvciBuYW1lIGFuZCBlbWFpbCByZXF1aXJlZCB3aGVuIFwiWWVzXCIgc2VsZWN0ZWQsIGFuZCBjbGVhcmVkIGFueSBlbnRlcmVkIHNvbGljaXRvciBkZXRhaWxzIHdoZW4gXCJOb1wiIHNlbGVjdGVkLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHNvbGljaXRvclJlcXVpcmVkT3JDbGVhcmVkID0gKCkgPT4ge1xyXG4gICAgWHJtLlBvcnRhbC5Gb3JtLmdldCgna2Juel9zb2xpY2l0b3JoZWxwJykuYXR0YWNoT25DaGFuZ2UoKCkgPT4ge1xyXG4gICAgICAgIGlmIChYcm0uUG9ydGFsLkZvcm0uZ2V0KCdrYm56X3NvbGljaXRvcmhlbHAnKS5nZXRWYWx1ZSgpID09ICcwJykge1xyXG4gICAgICAgICAgICBYcm0uUG9ydGFsLkZvcm0uZ2V0KCdrYm56X3NvbGljaXRvcmZpcnN0bmFtZScpLnNldFZhbHVlKFwiXCIpO1xyXG4gICAgICAgICAgICBYcm0uUG9ydGFsLkZvcm0uZ2V0KCdrYm56X3NvbGljaXRvcmxhc3RuYW1lJykuc2V0VmFsdWUoXCJcIik7XHJcbiAgICAgICAgICAgIFhybS5Qb3J0YWwuRm9ybS5nZXQoJ2tibnpfc29saWNpdG9yZW1haWxhZGRyZXNzJykuc2V0VmFsdWUoXCJcIik7XHJcbiAgICAgICAgICAgIFhybS5Qb3J0YWwuRm9ybS5nZXQoJ2tibnpfc29saWNpdG9yZmlyc3RuYW1lJykuc2V0UmVxdWlyZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBYcm0uUG9ydGFsLkZvcm0uZ2V0KCdrYm56X3NvbGljaXRvcmxhc3RuYW1lJykuc2V0UmVxdWlyZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBYcm0uUG9ydGFsLkZvcm0uZ2V0KCdrYm56X3NvbGljaXRvcmVtYWlsYWRkcmVzcycpLnNldFJlcXVpcmVkKGZhbHNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBYcm0uUG9ydGFsLkZvcm0uZ2V0KCdrYm56X3NvbGljaXRvcmZpcnN0bmFtZScpLnNldFJlcXVpcmVkKHRydWUpO1xyXG4gICAgICAgICAgICBYcm0uUG9ydGFsLkZvcm0uZ2V0KCdrYm56X3NvbGljaXRvcmxhc3RuYW1lJykuc2V0UmVxdWlyZWQodHJ1ZSk7XHJcbiAgICAgICAgICAgIFhybS5Qb3J0YWwuRm9ybS5nZXQoJ2tibnpfc29saWNpdG9yZW1haWxhZGRyZXNzJykuc2V0UmVxdWlyZWQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzb2xpY2l0b3JMb29rdXAgPSAoKSA9PiB7XHJcbiAgICBpZighWHJtLlBvcnRhbC5Gb3JtLmdldCgna2Juel9zb2xpY2l0b3InKS5nZXRWYWx1ZSgpIHx8IChYcm0uUG9ydGFsLkZvcm0uZ2V0KCdrYm56X3NvbGljaXRvcicpLmdldFZhbHVlKCkgJiYgWHJtLlBvcnRhbC5Gb3JtLmdldCgna2Juel9zb2xpY2l0b3InKS5nZXRWYWx1ZSgpLmlkID09PSBcIlwiKSkge1xyXG4gICAgICAgIFhybS5Qb3J0YWwuRm9ybS5nZXQoJ2tibnpfc29saWNpdG9yJykuc2V0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgWHJtLlBvcnRhbC5Gb3JtLmdldCgnU29saWNpdG9yX2VtYWlsX3F1aWNrdmlldycpLnNldFZpc2libGUoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAkKCcja2Juel9zb2xpY2l0b3JoZWxwX2xhYmVsJykudGV4dCgnRG8geW91IG5lZWQgdG8gdXBkYXRlIHlvdXIgc29saWNpdG9yXFwncyBkZXRhaWxzPycpXHJcbiAgICB9XHJcbn1cclxuIiwiZGVjbGFyZSBjb25zdCBtYXhFcXVpdHk6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbmV4cG9ydCBjb25zdCBpbml0U2hhcmVUcmFuc2FjdGlvbiA9ICgpID0+IHtcclxuICAgICQoJ3RhYmxlW2RhdGEtbmFtZT1cIkdlbmVyYWxcIl0gPiB0Ym9keSA+IHRyJykubm90KCc6Zmlyc3QnKS5yZW1vdmUoKTtcclxuICAgIGxldCBtaW5FcXVpdHkgPSAxMDAwLjAwO1xyXG4gICAgaWYgKG1heEVxdWl0eSA8PSBtaW5FcXVpdHkpIG1pbkVxdWl0eSA9IG1heEVxdWl0eTtcclxuICAgIFhybS5Qb3J0YWwuRm9ybS5WYWxpZGF0aW9uLnNldE51bWJlclJhbmdlKCdrYm56X2Ftb3VudCcsIG1pbkVxdWl0eSwgbWF4RXF1aXR5LCBgcGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiAkJHttaW5FcXVpdHl9IGFuZCAkJHttYXhFcXVpdHl9YCwgdHJ1ZSk7XHJcbn0iLCJpbXBvcnQgeyBkYXRhIH0gZnJvbSBcImpxdWVyeVwiO1xyXG5pbXBvcnQgeyBnZXRQYXJhbWV0ZXJCeU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3VybC1oZWxwZXJcIjtcclxuaW1wb3J0IHsgZ2V0RXF1aXR5QW1vdW50LCBzZXRSZWxhdGlvbnNoaXBNYW5hZ2VyIH0gZnJvbSBcIi4uL2NvbW1vbi9zb2Etb2RhdGFcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBpbml0U2hhcmVkT3duZXJzaGlwQWdyZWVtZW50ID0gKCkgPT4ge1xyXG4gICAgY29uc3QgY3VycmVudFVzZXIgPSAkKCcjdXNlcklkJykudmFsKCk7XHJcbiAgICBjb25zdCBzaGFyZWRPd25lclBvaW50T2ZDb250YWN0ID0gWHJtLlBvcnRhbC5Gb3JtLmdldCgna2Juel9zaGFyZWRvd25lcnBvaW50b2Zjb250YWN0JykuZ2V0VmFsdWUoKTtcclxuICAgIGNvbnN0IGlzUHJpbWFyeUNvbnRhY3QgPSAoY3VycmVudFVzZXIgPT0gc2hhcmVkT3duZXJQb2ludE9mQ29udGFjdC5pZCk7XHJcblxyXG4gICAgZ2V0UHJvcGVydHkoKTtcclxuICAgIGdldFJlbGF0aW9uc2hpcE1hbmFnZXIoKTtcclxuICAgIGdldEN1cnJlbnRTaGFyZSgpO1xyXG4gICAgJCgnI1NoYXJlX1RyYW5zYWN0aW9ucyA+IC5lbnRpdHktZ3JpZC5zdWJncmlkJykub24oJ2xvYWRlZCcsIGFkZFBlcmNlbnRTaWduKTtcclxuXHJcbiAgICBpZiAoIWlzUHJpbWFyeUNvbnRhY3QpIHJldHVybjtcclxuXHJcbiAgICAkKCcjU2hhcmVfVHJhbnNhY3Rpb25zID4gLmVudGl0eS1ncmlkLnN1YmdyaWQnKS5vbignbG9hZGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQoJyNTaGFyZV9UcmFuc2FjdGlvbnMgdGRbYXJpYS1sYWJlbD1cImFjdGlvbiBtZW51XCJdJykuc2hvdygpO1xyXG4gICAgICAgIHNldENyZWF0ZVZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICQuZ2V0KFwiL19vZGF0YS9rYm56X3NoYXJlcHVyY2hhc2V0cmFuc2FjdGlvbnM/JHRvcD0xJiRmaWx0ZXI9c3RhdHVzY29kZS9WYWx1ZSUyMGVxJTIwMVwiLCBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUgJiYgcmVzdWx0LnZhbHVlLmxlbmd0aCA9PT0gMCkgc2V0Q3JlYXRlVmlzaWJsZSh0cnVlKTtcclxuICAgICAgICAgICAgZWxzZSBzaG93U2hhcmVQdXJjaGFzZVRoYW5rWW91KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbmNvbnN0IHNldENyZWF0ZVZpc2libGUgPSAodmlzaWJsZTogYm9vbGVhbikgPT4ge1xyXG4gICAgJCgnI1NoYXJlX1RyYW5zYWN0aW9ucyBhW3RpdGxlPVwiQ3JlYXRlXCJdJykudG9nZ2xlKHZpc2libGUpO1xyXG59XHJcblxyXG5jb25zdCBnZXRQcm9wZXJ0eSA9ICgpID0+IHtcclxuICAgIGNvbnN0IHByb3BlcnR5ID0gWHJtLlBvcnRhbC5Gb3JtLmdldCgna2Juel9wcm9wZXJ0eScpLmdldFZhbHVlKCk7XHJcbiAgICBpZiAoIXByb3BlcnR5KSByZXR1cm47XHJcblxyXG4gICAgJC5nZXQoYC9fb2RhdGEva2Juel9waG9wcm9wZXJ0aWVzPyRmaWx0ZXI9a2Juel9waG9wcm9wZXJ0eWlkJTIwZXElMjBndWlkJTI3JHtwcm9wZXJ0eS5pZH0lMjdgLCBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSByZXN1bHQudmFsdWVbMF07XHJcbiAgICAgICAgICAgICQoJyNrb19saW5lMScpLnRleHQoZGF0YS5rYm56X2xpbmUxKTtcclxuICAgICAgICAgICAgJCgnI2tvX2xpbmUyJykudGV4dChkYXRhLmtibnpfbGluZTIpO1xyXG4gICAgICAgICAgICAkKCcja29fbGluZTMnKS50ZXh0KGAke2RhdGEua2Juel9jaXR5fSAke2RhdGEua2Juel9wb3N0YWxjb2RlfWApO1xyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxufVxyXG5cclxuY29uc3QgZ2V0UmVsYXRpb25zaGlwTWFuYWdlciA9ICgpID0+IHtcclxuICAgIGxldCBpZCA9IGdldFBhcmFtZXRlckJ5TmFtZSgnSWQnKTtcclxuICAgIGlmICghaWQpIHJldHVybjtcclxuICAgIHNldFJlbGF0aW9uc2hpcE1hbmFnZXIoaWQpO1xyXG59XHJcblxyXG5jb25zdCBnZXRDdXJyZW50U2hhcmUgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBzaGFyZVJlZ2lzdGVyID0gWHJtLlBvcnRhbC5Gb3JtLmdldCgna2Juel9jdXJyZW50c2hhcmVyZWdpc3RlcicpLmdldFZhbHVlKCk7XHJcbiAgICBpZiAoIXNoYXJlUmVnaXN0ZXIpIHJldHVybjtcclxuXHJcbiAgICBnZXRFcXVpdHlBbW91bnQoc2hhcmVSZWdpc3Rlci5pZCwgKGN1cnJlbnRFcXVpdHkpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudEVxdWl0eSkge1xyXG4gICAgICAgICAgICAkKCcja29fY3VycmVudGVxdWl0eScpLnRleHQoYCQke3BhcnNlRmxvYXQoY3VycmVudEVxdWl0eSkudG9GaXhlZCgyKX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuY29uc3QgYWRkUGVyY2VudFNpZ24gPSAoKSA9PiB7XHJcbiAgICBjb25zdCBwZXJjZW50YWdlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hdHRyaWJ1dGU9J2tibnpfcGVyY2VudGFnZXRvYmVwdXJjaGFzZWQnXVwiKTtcclxuICAgIHBlcmNlbnRhZ2VzLmZvckVhY2goZnVuY3Rpb24oY3VycmVudCl7KGN1cnJlbnQgYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dCArPSAnJSd9KTtcclxufVxyXG5cclxuY29uc3Qgc2hvd1NoYXJlUHVyY2hhc2VUaGFua1lvdSA9ICgpID0+IHtcclxuICAgICQoJyNrb19zaGFyZXRyYW5zYWN0aW9ubm90aWZpY2F0aW9uJykuc2hvdygpO1xyXG59IiwiZXhwb3J0IGNvbnN0IGdldFBhcmFtZXRlckJ5TmFtZSA9IChuYW1lLCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZikgPT4ge1xyXG4gICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvW1xcW1xcXV0vZywgJ1xcXFwkJicpO1xyXG4gICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnWz8mXScgKyBuYW1lICsgJyg9KFteJiNdKil8JnwjfCQpJyksXHJcbiAgICAgICAgcmVzdWx0cyA9IHJlZ2V4LmV4ZWModXJsKTtcclxuICAgIGlmICghcmVzdWx0cykgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAoIXJlc3VsdHNbMl0pIHJldHVybiAnJztcclxuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0c1syXS5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XHJcbn0iLCJleHBvcnQgY29uc3QgYXV0b2NvbXBsZXRlT2ZmID0gKCkgPT4ge1xyXG4gICAgJCgnZm9ybScpLmF0dHIoJ2F1dG9jb21wbGV0ZScsICdvZmYnKTtcclxufTsiLCJpbXBvcnQgeyBnZXRFcXVpdHlBbW91bnQsIHNldFJlbGF0aW9uc2hpcE1hbmFnZXIgfSBmcm9tIFwiLi4vY29tbW9uL3NvYS1vZGF0YVwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGluaXRHb2Fsc01hbmFnZW1lbnQgPSAoKSA9PiB7XHJcbiAgICAkKCcja29fcHJvcGVydHlkZXRhaWxzJykuZGV0YWNoKCkuYXBwZW5kVG8oJ2ZpZWxkc2V0W2FyaWEtbGFiZWw9XCJHZW5lcmFsXCJdJylcclxuICAgIHNob3dSZXBvcnRTZWN0aW9uKCk7XHJcbiAgICBnZXRSZWxhdGlvbnNoaXBNYW5hZ2VyKCk7XHJcbiAgICBnZXRDdXJyZW50U2hhcmUoKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNob3dSZXBvcnRTZWN0aW9uID0gKCkgPT4ge1xyXG4gICAgY29uc3Qgc3RhdHVzID0gWHJtLlBvcnRhbC5Gb3JtLmdldCgnc3RhdHVzY29kZV9FbnRpdHlTdGF0dXMnKS5nZXRWYWx1ZSgpO1xyXG5cclxuICAgIGlmIChzdGF0dXMuaWQgPT09ICc5NzM3NzAwMDMnIHx8IHN0YXR1cy5pZCA9PT0gJzInKSB7XHJcbiAgICAgICAgJCgnZmllbGRzZXRbYXJpYS1sYWJlbD1cIkFncmVlZCBGaW5hbmNpYWwgU2l0dWF0aW9uXCJdJykuc2hvdygpXHJcbiAgICB9O1xyXG59O1xyXG5cclxuY29uc3QgZ2V0Q3VycmVudFNoYXJlID0gKCkgPT4ge1xyXG4gICAgY29uc3Qgc2hhcmVSZWdpc3RlciA9IFhybS5Qb3J0YWwuRm9ybS5nZXQoJ2tibnpfc2hhcmVyZWdpc3RlcicpLmdldFZhbHVlKCk7XHJcbiAgICBpZiAoIXNoYXJlUmVnaXN0ZXIpIHJldHVybjtcclxuICAgIGdldEVxdWl0eUFtb3VudChzaGFyZVJlZ2lzdGVyLmlkLCAoY3VycmVudEVxdWl0eSwgcHJvcGVydHlWYWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmIChjdXJyZW50RXF1aXR5ICYmIHByb3BlcnR5VmFsdWUpIHtcclxuICAgICAgICAgICAgbGV0IGhvbWVvd25lclNoYXJlID0gcHJvcGVydHlWYWx1ZSAtIGN1cnJlbnRFcXVpdHk7XHJcbiAgICAgICAgICAgICQoJyNrb19ob21lb3duZXJzaGFyZScpLnRleHQoYCQke2hvbWVvd25lclNoYXJlLnRvRml4ZWQoMil9YCk7XHJcbiAgICAgICAgICAgICQoJyNrb19wcm9wZXJ0eXZhbHVlJykudGV4dChgJCR7cGFyc2VGbG9hdChwcm9wZXJ0eVZhbHVlKS50b0ZpeGVkKDIpfWApO1xyXG4gICAgICAgICAgICAkKCcja29fY3VycmVudGVxdWl0eScpLnRleHQoYCQke3BhcnNlRmxvYXQoY3VycmVudEVxdWl0eSkudG9GaXhlZCgyKX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuO1xyXG59XHJcblxyXG5jb25zdCBnZXRSZWxhdGlvbnNoaXBNYW5hZ2VyID0gKCkgPT4ge1xyXG4gICAgbGV0IHNvYSA9IFhybS5Qb3J0YWwuRm9ybS5nZXQoJ2tibnpfc2hhcmVkb3duZXJzaGlwYWdyZWVtZW50aWQnKS5nZXRWYWx1ZSgpO1xyXG4gICAgaWYgKCFzb2EpIHJldHVybjtcclxuICAgIHNldFJlbGF0aW9uc2hpcE1hbmFnZXIoc29hLmlkKTtcclxufSJdLCJzb3VyY2VSb290IjoiIn0=