react-bootstrap-table-ng-toolkit 4.19.0 → 4.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgToolkit=t(require("react")):e.ReactBootstrapTableNgToolkit=t(e.React)}(self,e=>(()=>{var t={40(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(556)),a=r(o(442)),n={className:"",style:{}},l=e=>{const{onExport:t,children:o,className:r,...s}={...n,...e};return a.default.createElement("button",{type:"button",className:`react-bs-table-csv-btn btn btn-default ${r}`,onClick:()=>t(),...s},o)};l.propTypes={children:s.default.node.isRequired,onExport:s.default.func.isRequired,className:s.default.string,style:s.default.object},t.default=l},68(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(556)),a=r(o(442)),n=({onClear:e,text:t="Clear",className:o=""})=>a.default.createElement("button",{className:`btn btn-default ${o}`,onClick:e},t);n.propTypes={onClear:s.default.func.isRequired,className:s.default.string,text:s.default.string},t.default=n},140(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(556)),a=r(o(442)),n=({columns:e,onColumnToggle:t,toggles:o,btnClassName:r="",className:s="",contextual:n="primary"})=>a.default.createElement("div",{className:`btn-group btn-group-toggle ${s}`,"data-toggle":"buttons"},e.map(e=>({...e,toggle:o[e.dataField]})).map(e=>a.default.createElement("button",{type:"button",key:e.dataField,className:`${r} btn btn-${n} ${e.toggle?"active":""}`,"data-toggle":"button","aria-pressed":e.toggle?"true":"false",onClick:()=>t(e.dataField)},e.text)));n.propTypes={columns:s.default.array.isRequired,toggles:s.default.object.isRequired,onColumnToggle:s.default.func.isRequired,btnClassName:s.default.string,className:s.default.string,contextual:s.default.string},t.default=n},213(e,t,o){var r,s,a;s=[],void 0===(a="function"==typeof(r=function(){"use strict";function t(e,t){return void 0===t?t={autoBom:!1}:"object"!=typeof t&&(console.warn("Deprecated: Expected third argument to be a object"),t={autoBom:!t}),t.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\ufeff",e],{type:e.type}):e}function r(e,t,o){var r=new XMLHttpRequest;r.open("GET",e),r.responseType="blob",r.onload=function(){i(r.response,t,o)},r.onerror=function(){console.error("could not download file")},r.send()}function s(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function a(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(o){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var n="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof o.g&&o.g.global===o.g?o.g:void 0,l=n.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),i=n.saveAs||("object"!=typeof window||window!==n?function(){}:"download"in HTMLAnchorElement.prototype&&!l?function(e,t,o){var l=n.URL||n.webkitURL,i=document.createElement("a");t=t||e.name||"download",i.download=t,i.rel="noopener","string"==typeof e?(i.href=e,i.origin===location.origin?a(i):s(i.href)?r(e,t,o):a(i,i.target="_blank")):(i.href=l.createObjectURL(e),setTimeout(function(){l.revokeObjectURL(i.href)},4e4),setTimeout(function(){a(i)},0))}:"msSaveOrOpenBlob"in navigator?function(e,o,n){if(o=o||e.name||"download","string"!=typeof e)navigator.msSaveOrOpenBlob(t(e,n),o);else if(s(e))r(e,o,n);else{var l=document.createElement("a");l.href=e,l.target="_blank",setTimeout(function(){a(l)})}}:function(e,t,o,s){if((s=s||open("","_blank"))&&(s.document.title=s.document.body.innerText="downloading..."),"string"==typeof e)return r(e,t,o);var a="application/octet-stream"===e.type,i=/constructor/i.test(n.HTMLElement)||n.safari,u=/CriOS\/[\d]+/.test(navigator.userAgent);if((u||a&&i||l)&&"undefined"!=typeof FileReader){var c=new FileReader;c.onloadend=function(){var e=c.result;e=u?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),s?s.location.href=e:location=e,s=null},c.readAsDataURL(e)}else{var d=n.URL||n.webkitURL,p=d.createObjectURL(e);s?s.location=p:location.href=p,s=null,setTimeout(function(){d.revokeObjectURL(p)},4e4)}});n.saveAs=i.saveAs=i,e.exports=i})?r.apply(t,s):r)||(e.exports=a)},282(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(40));t.default={ExportCSVButton:s.default}},442(t){"use strict";t.exports=e},457(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.save=t.transform=t.getMetaInfo=void 0;const s=r(o(213));t.getMetaInfo=e=>e.map(e=>({field:e.dataField,type:e.csvType||String,formatter:e.csvFormatter,formatExtraData:e.formatExtraData,header:e.csvText||e.text,export:!1!==e.csvExport,row:Number(e.row)||0,rowSpan:Number(e.rowSpan)||1,colSpan:Number(e.colSpan)||1,footer:e.footer,footerFormatter:e.footerFormatter})).filter(e=>e.export);t.transform=(e,t,o,r,{separator:s,ignoreHeader:a,ignoreFooter:n})=>{const l=t.filter(e=>e.export);let i="";return a||(i+=l.map(e=>`"${e.header}"`).join(s),i+="\n"),0===e.length||(i+=e.map((e,t)=>l.map(o=>{let s=r.get(e,o.field);return o.formatter&&(s=o.formatter(s,e,t,o.formatExtraData)),o.type===String?`"${`${s}`.replace(/"/g,'""')}"`:s}).join(s)).join("\n"),n||(i+="\n",i+=l.map((t,s)=>{if("function"==typeof t.footer){const a=r.pluck(e,o[s].dataField);return`"${t.footer(a,o[s],s)}"`}return t.footerFormatter?`"${t.footerFormatter(o[s],s)}"`:`"${t.footer}"`}).join(s))),i};t.save=(e,{noAutoBOM:t,fileName:o,blobType:r})=>{s.default.saveAs(new Blob([e],{type:r}),o,t)}},469(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(881));t.default={csvOperation:s.default}},470(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(801)),a=r(o(68));t.default={SearchBar:s.default,ClearSearchButton:a.default}},499(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(442));t.default=(e={searchFormatted:!1,afterSearch:void 0,onColumnMatch:()=>!1})=>(t,o,r)=>{const a=s.default.createContext(null);class n extends s.default.Component{constructor(e){super(e);let t=e.data;o()&&""!==this.props.searchText?r(this.props.searchText):(t=this.search(e),this.triggerListener(t,!0)),this.state={data:t}}getSearched(){return this.state.data}triggerListener(t,o){e.afterSearch&&!o&&e.afterSearch(t),this.props.dataChangeListener&&this.props.dataChangeListener.emit("filterChanged",t.length)}componentDidUpdate(e){if(e.searchText!==this.props.searchText)if(o())r(this.props.searchText);else{const e=this.search(this.props);this.triggerListener(e),this.setState({data:e})}else if(o())t.isEqual(this.state.data,this.props.data)||this.setState({data:this.props.data});else if(!t.isEqual(e.data,this.props.data)){const e=this.search(this.props);this.triggerListener(e),this.setState({data:e})}}search(o){const{data:r,columns:s}=o,a=o.searchText.toLowerCase();return r.filter((o,r)=>{for(let n=0;n<s.length;n+=1){const l=s[n];if(!1===l.searchable)continue;let i=t.get(o,l.dataField);if(l.formatter&&e.searchFormatted?i=l.formatter(i,o,r,l.formatExtraData):l.filterValue&&(i=l.filterValue(i,o)),e.onColumnMatch){if(e.onColumnMatch({searchText:a,value:i,column:l,row:o}))return!0}else if(null!=i&&(i=i.toString().toLowerCase(),i.indexOf(a)>-1))return!0}return!1})}render(){return s.default.createElement(a.Provider,{value:{data:this.state.data}},this.props.children)}}return{Provider:n,Consumer:a.Consumer}}},555(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(140));t.default={ToggleList:s.default}},556(e,t,o){e.exports=o(694)()},633(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(442)),a=r(o(499)),n=r(o(880)),l=s.default.createContext({searchProps:{searchText:"",onSearch:e=>{},onClear:()=>{}},csvProps:{onExport:()=>{}},columnToggleProps:{columns:[],toggles:[],onColumnToggle:e=>{}},baseProps:{keyField:void 0,columns:[],data:[],bootstrap4:void 0}});class i extends((0,n.default)(s.default.Component)){constructor(e){super(e);const t={columnToggle:{},searchText:"object"==typeof e.search&&e.search.defaultSearch||""};this._=null,this.onClear=this.onClear.bind(this),this.onSearch=this.onSearch.bind(this),this.onColumnToggle=this.onColumnToggle.bind(this),this.setDependencyModules=this.setDependencyModules.bind(this),e.columnToggle&&(t.columnToggle=e.columns.reduce((e,t)=>(e[t.dataField]=!t.hidden,e),{})),t.searchText="object"==typeof e.search&&e.search.defaultSearch||"",this.state=t}static getDerivedStateFromProps(e,t){const o=t.columnToggle;let r;return r=e.columnToggle?e.columns.reduce((e,t)=>(e[t.dataField]=!t.hidden,e),{}):{},o?{...t,currColumnToggle:o}:{...t,propsColumnToggle:r}}onSearch(e){e!==this.state.searchText&&this.setState({searchText:e})}onClear(){this.setState({searchText:""})}onColumnToggle(e){const{columnToggle:t}=this.state;t[e]=!t[e],this.setState({...this.state,columnToggle:t})}setDependencyModules(e){this._=e}render(){const e={keyField:this.props.keyField,columns:this.props.columns,data:this.props.data,search:this.props.search??!1,exportCSV:this.props.exportCSV??!1,bootstrap4:this.props.bootstrap4??!1,children:this.props.children,setDependencyModules:this.setDependencyModules,registerExposedAPI:this.registerExposedAPI};return this.props.search&&(e.search={searchContext:(0,a.default)(this.props.search),searchText:this.state.searchText}),this.props.columnToggle&&(e.columnToggle={toggles:this.state.columnToggle}),s.default.createElement(l.Provider,{value:{searchProps:{searchText:this.state.searchText,onSearch:this.onSearch,onClear:this.onClear},csvProps:{onExport:this.handleExportCSV},columnToggleProps:{columns:this.props.columns,toggles:this.state.columnToggle,onColumnToggle:this.onColumnToggle},baseProps:e}},this.props.children)}}t.default={Provider:i,Consumer:l.Consumer}},688(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Search=t.CSVExport=t.ColumnToggle=t.ToolkitContext=void 0;const s=r(o(633)),a=r(o(921));t.default=a.default,t.ToolkitContext=s.default;var n=o(555);Object.defineProperty(t,"ColumnToggle",{enumerable:!0,get:function(){return r(n).default}});var l=o(282);Object.defineProperty(t,"CSVExport",{enumerable:!0,get:function(){return r(l).default}});var i=o(470);Object.defineProperty(t,"Search",{enumerable:!0,get:function(){return r(i).default}})},694(e,t,o){"use strict";var r=o(925);function s(){}function a(){}a.resetWarningCache=s,e.exports=function(){function e(e,t,o,s,a,n){if(n!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var o={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:s};return o.PropTypes=o,o}},801(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(442)),a=(e,t,o)=>{let r;return(...s)=>{const a=o&&!r;clearTimeout(r),r=setTimeout(()=>{r=void 0,o||e.apply(this,s)},t||0),a&&e.apply(this,s)}};class n extends s.default.Component{constructor(e){super(e),this.input=null,this.onChangeValue=e=>{this.setState({value:e.target.value})},this.onKeyup=()=>{const{delay:e=250,onSearch:t}=this.props;a(()=>{t(this.input?.value??"")},e)()},this.state={value:e.searchText??""}}componentDidUpdate(e){this.props.searchText!==e.searchText&&this.setState({value:this.props.searchText||""})}render(){const{className:e="",style:t={},placeholder:o="Search",tableId:r="0",searchText:a="Search this table"}=this.props;return s.default.createElement("label",{htmlFor:`search-bar-${r}`,className:"search-label"},s.default.createElement("span",{id:`search-bar-${r}-label`,className:"sr-only"},a),s.default.createElement("input",{ref:e=>{this.input=e},id:`search-bar-${r}`,type:"text",style:t,"aria-labelledby":`search-bar-${r}-label`,onKeyUp:()=>this.onKeyup(),onChange:this.onChangeValue,className:`form-control ${e}`,value:this.state.value,placeholder:o}))}}t.default=n},880(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(469));t.default=e=>class extends(s.default.csvOperation(e)){constructor(){super(...arguments),this.registerExposedAPI=e=>{this.tableExposedAPIEmitter=e}}}},881(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(442)),a=o(457),n={fileName:"spreadsheet.csv",separator:",",ignoreHeader:!1,ignoreFooter:!0,noAutoBOM:!0,blobType:"text/plain;charset=utf-8",exportAll:!0,onlyExportSelection:!1};t.default=e=>class extends s.default.Component{constructor(){super(...arguments),this.handleExportCSV=e=>{const{columns:t,exportCSV:o,keyField:r}=this.props,s=(0,a.getMetaInfo)(t),l=!0===o?n:{...n,...o};let i;if(void 0!==e)i=e;else if(l.exportAll)i=this.props.data;else if(l.onlyExportFiltered){const e={result:void 0};this.tableExposedAPIEmitter.emit("get.filtered.rows",e),i=e.result}else{const e={result:void 0};this.tableExposedAPIEmitter.emit("get.table.data",e),i=e.result}if(l.onlyExportSelection){const e={result:void 0};this.tableExposedAPIEmitter.emit("get.selected.rows",e);const t=e.result??[];i=i.filter(e=>t.includes(e[r]))}const u=(0,a.transform)(i,s,t,this._,l);(0,a.save)(u,l)}}}},921(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=r(o(556)),a=r(o(442)),n=r(o(633)),l=e=>a.default.createElement(n.default.Provider,{...e},a.default.createElement(n.default.Consumer,null,t=>e.children(t)));l.propTypes={children:s.default.func.isRequired},t.default=l},925(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"}},o={};function r(e){var s=o[e];if(void 0!==s)return s.exports;var a=o[e]={exports:{}};return t[e].call(a.exports,a,a.exports,r),a.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r(688)})());
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC5taW4uanMiLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsVUFDUixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsU0FBVUosR0FDUSxpQkFBWkMsUUFDZEEsUUFBc0MsNkJBQUlELEVBQVFHLFFBQVEsVUFFMURKLEVBQW1DLDZCQUFJQyxFQUFRRCxFQUFZLE1BQzVELENBVEQsQ0FTR08sS0FBT0MsRyx5S0NUVixrQkFDQSxZQUlNQyxFQUE4QixDQUNsQ0MsVUFBVyxHQUNYQyxNQUFPLENBQUMsR0FHSkMsRUFDSkMsSUFFQSxNQUFNLFNBQUVDLEVBQVEsU0FBRUMsRUFBUSxVQUFFTCxLQUFjTSxHQUFTLElBQUtQLEtBQWdDSSxHQUV4RixPQUNFLGtDQUNFSSxLQUFLLFNBQ0xQLFVBQVcsMENBQTBDQSxJQUNyRFEsUUFBUyxJQUFNSixPQUNYRSxHQUVIRCxJQUtQSCxFQUFnQk8sVUFBWSxDQUMxQkosU0FBVSxVQUFVSyxLQUFLQyxXQUN6QlAsU0FBVSxVQUFVUSxLQUFLRCxXQUN6QlgsVUFBVyxVQUFVYSxPQUNyQlosTUFBTyxVQUFVYSxRQUduQixVQUFlWixDLDhKQ2xDZixrQkFDQSxZQUdNYSxFQUFjLEVBQ2xCQyxVQUNBQyxPQUFPLFFBQ1BqQixZQUFZLE1BRVosa0NBQVFBLFVBQVcsbUJBQW1CQSxJQUFhUSxRQUFTUSxHQUN6REMsR0FJTEYsRUFBWU4sVUFBWSxDQUN0Qk8sUUFBUyxVQUFVSixLQUFLRCxXQUN4QlgsVUFBVyxVQUFVYSxPQUNyQkksS0FBTSxVQUFVSixRQVFsQixVQUFlRSxDLCtKQ3pCZixrQkFDQSxZQUlNRyxFQUFhLEVBQ2pCQyxVQUNBQyxpQkFDQUMsVUFDQUMsZUFBZSxHQUNmdEIsWUFBWSxHQUNadUIsYUFBYSxhQUViLCtCQUNFdkIsVUFBVyw4QkFBOEJBLElBQVcsY0FDeEMsV0FFWG1CLEVBQ0VLLElBQUtDLElBQThCLElBQy9CQSxFQUNIQyxPQUFRTCxFQUFRSSxFQUFPRSxjQUV4QkgsSUFBS0MsR0FDSixrQ0FDRWxCLEtBQUssU0FDTHFCLElBQUtILEVBQU9FLFVBQ1ozQixVQUFXLEdBQUdzQixhQUF3QkMsS0FDcENFLEVBQU9DLE9BQVMsU0FBVyxLQUMzQixjQUNVLFNBQVEsZUFDTkQsRUFBT0MsT0FBUyxPQUFTLFFBQ3ZDbEIsUUFBUyxJQUFNWSxFQUFlSyxFQUFPRSxZQUVwQ0YsRUFBT1IsUUFNbEJDLEVBQVdULFVBQVksQ0FDckJVLFFBQVMsVUFBVVUsTUFBTWxCLFdBQ3pCVSxRQUFTLFVBQVVQLE9BQU9ILFdBQzFCUyxlQUFnQixVQUFVUixLQUFLRCxXQUMvQlcsYUFBYyxVQUFVVCxPQUN4QmIsVUFBVyxVQUFVYSxPQUNyQlUsV0FBWSxVQUFVVixRQVN4QixVQUFlSyxDLGFDdERmLFVBQXdELEVBQU8sUUFBSSwwQkFBRixFQUE4RixXQUFXLGFBQWEsU0FBU1ksRUFBRUMsRUFBRUQsR0FBRyxZQUFNLElBQW9CQSxFQUFFQSxFQUFFLENBQUNFLFNBQVEsR0FBSSxpQkFBaUJGLElBQUlHLFFBQVFDLEtBQUssc0RBQXNESixFQUFFLENBQUNFLFNBQVNGLElBQUlBLEVBQUVFLFNBQVMsNkVBQTZFRyxLQUFLSixFQUFFeEIsTUFBTSxJQUFJNkIsS0FBSyxDQUFDLFNBQVNMLEdBQUcsQ0FBQ3hCLEtBQUt3QixFQUFFeEIsT0FBT3dCLENBQUMsQ0FBQyxTQUFTTSxFQUFFTixFQUFFRCxFQUFFTyxHQUFHLElBQUlDLEVBQUUsSUFBSUMsZUFBZUQsRUFBRUUsS0FBSyxNQUFNVCxHQUFHTyxFQUFFRyxhQUFhLE9BQU9ILEVBQUVJLE9BQU8sV0FBV0MsRUFBRUwsRUFBRU0sU0FBU2QsRUFBRU8sRUFBRSxFQUFFQyxFQUFFTyxRQUFRLFdBQVdaLFFBQVFhLE1BQU0sMEJBQTBCLEVBQUVSLEVBQUVTLE1BQU0sQ0FBQyxTQUFTVCxFQUFFUCxHQUFHLElBQUlELEVBQUUsSUFBSVMsZUFBZVQsRUFBRVUsS0FBSyxPQUFPVCxHQUFFLEdBQUksSUFBSUQsRUFBRWlCLE1BQU0sQ0FBQyxNQUFNaEIsR0FBRyxDQUFDLE9BQU8sS0FBS0QsRUFBRWtCLFFBQVEsS0FBS2xCLEVBQUVrQixNQUFNLENBQUMsU0FBU0MsRUFBRWxCLEdBQUcsSUFBSUEsRUFBRW1CLGNBQWMsSUFBSUMsV0FBVyxTQUFTLENBQUMsTUFBTWQsR0FBRyxJQUFJUCxFQUFFc0IsU0FBU0MsWUFBWSxlQUFldkIsRUFBRXdCLGVBQWUsU0FBUSxHQUFHLEVBQUdDLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUcsRUFBRSxNQUFNeEIsRUFBRW1CLGNBQWNwQixFQUFFLENBQUMsQ0FBQyxJQUFJMEIsRUFBRSxpQkFBaUJELFFBQVFBLE9BQU9BLFNBQVNBLE9BQU9BLE9BQU8saUJBQWlCMUQsTUFBTUEsS0FBS0EsT0FBT0EsS0FBS0EsS0FBSyxpQkFBaUIsRUFBQThDLEdBQVEsRUFBQUEsRUFBT2MsU0FBUyxFQUFBZCxFQUFPLEVBQUFBLE9BQVksRUFBRVosRUFBRXlCLEVBQUVFLFdBQVcsWUFBWXZCLEtBQUt1QixVQUFVQyxZQUFZLGNBQWN4QixLQUFLdUIsVUFBVUMsYUFBYSxTQUFTeEIsS0FBS3VCLFVBQVVDLFdBQVdoQixFQUFFYSxFQUFFSSxTQUFTLGlCQUFpQkwsUUFBUUEsU0FBU0MsRUFBRSxXQUFXLEVBQUUsYUFBYUssa0JBQWtCQyxZQUFZL0IsRUFBRSxTQUFTRCxFQUFFYSxFQUFFb0IsR0FBRyxJQUFJQyxFQUFFUixFQUFFUyxLQUFLVCxFQUFFVSxVQUFVQyxFQUFFZixTQUFTZ0IsY0FBYyxLQUFLekIsRUFBRUEsR0FBR2IsRUFBRXVDLE1BQU0sV0FBV0YsRUFBRUcsU0FBUzNCLEVBQUV3QixFQUFFSSxJQUFJLFdBQVcsaUJBQWlCekMsR0FBR3FDLEVBQUVLLEtBQUsxQyxFQUFFcUMsRUFBRU0sU0FBU0MsU0FBU0QsT0FBT3hCLEVBQUVrQixHQUFHN0IsRUFBRTZCLEVBQUVLLE1BQU1uQyxFQUFFUCxFQUFFYSxFQUFFb0IsR0FBR2QsRUFBRWtCLEVBQUVBLEVBQUVRLE9BQU8sWUFBWVIsRUFBRUssS0FBS1IsRUFBRVksZ0JBQWdCOUMsR0FBRytDLFdBQVcsV0FBV2IsRUFBRWMsZ0JBQWdCWCxFQUFFSyxLQUFLLEVBQUUsS0FBS0ssV0FBVyxXQUFXNUIsRUFBRWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUscUJBQXFCVCxVQUFVLFNBQVNGLEVBQUViLEVBQUVvQixHQUFHLEdBQUdwQixFQUFFQSxHQUFHYSxFQUFFYSxNQUFNLFdBQVcsaUJBQWlCYixFQUFFRSxVQUFVcUIsaUJBQWlCakQsRUFBRTBCLEVBQUVPLEdBQUdwQixRQUFRLEdBQUdMLEVBQUVrQixHQUFHbkIsRUFBRW1CLEVBQUViLEVBQUVvQixPQUFPLENBQUMsSUFBSUMsRUFBRVosU0FBU2dCLGNBQWMsS0FBS0osRUFBRVEsS0FBS2hCLEVBQUVRLEVBQUVXLE9BQU8sU0FBU0UsV0FBVyxXQUFXNUIsRUFBRWUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTbEMsRUFBRVEsRUFBRVcsRUFBRU4sR0FBRyxJQUFHQSxFQUFFQSxHQUFHSCxLQUFLLEdBQUcsYUFBY0csRUFBRVMsU0FBUzRCLE1BQU1yQyxFQUFFUyxTQUFTNkIsS0FBS0MsVUFBVSxrQkFBa0IsaUJBQWlCcEQsRUFBRSxPQUFPTyxFQUFFUCxFQUFFUSxFQUFFVyxHQUFHLElBQUljLEVBQUUsNkJBQTZCakMsRUFBRXZCLEtBQUt5RCxFQUFFLGVBQWU3QixLQUFLcUIsRUFBRTJCLGNBQWMzQixFQUFFNEIsT0FBT2pCLEVBQUUsZUFBZWhDLEtBQUt1QixVQUFVQyxXQUFXLElBQUlRLEdBQUdKLEdBQUdDLEdBQUdqQyxJQUFJLG9CQUFvQnNELFdBQVcsQ0FBQyxJQUFJQyxFQUFFLElBQUlELFdBQVdDLEVBQUVDLFVBQVUsV0FBVyxJQUFJeEQsRUFBRXVELEVBQUVFLE9BQU96RCxFQUFFb0MsRUFBRXBDLEVBQUVBLEVBQUUwRCxRQUFRLGVBQWUseUJBQXlCOUMsRUFBRUEsRUFBRStCLFNBQVNGLEtBQUt6QyxFQUFFMkMsU0FBUzNDLEVBQUVZLEVBQUUsSUFBSSxFQUFFMkMsRUFBRUksY0FBYzVELEVBQUUsS0FBSyxDQUFDLElBQUk2RCxFQUFFbkMsRUFBRVMsS0FBS1QsRUFBRVUsVUFBVTBCLEVBQUVELEVBQUVmLGdCQUFnQjlDLEdBQUdhLEVBQUVBLEVBQUUrQixTQUFTa0IsRUFBRWxCLFNBQVNGLEtBQUtvQixFQUFFakQsRUFBRSxLQUFLa0MsV0FBVyxXQUFXYyxFQUFFYixnQkFBZ0JjLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBR3BDLEVBQUVJLE9BQU9qQixFQUFFaUIsT0FBT2pCLEVBQStCbEQsRUFBT0QsUUFBUW1ELENBQUUsR0FBNWtGLDhCLCtKQ0duRSxpQkFFQSxVQUFlLENBQUV6QyxnQkFBQSxVLHNCQ0xqQlQsRUFBT0QsUUFBVU0sQyx1TUNDakIsa0JBRWEsRUFBQStGLFlBQWUxRSxHQUMxQkEsRUFDR0ssSUFBS0MsSUFBZ0IsQ0FDcEJxRSxNQUFPckUsRUFBT0UsVUFDZHBCLEtBQU1rQixFQUFPc0UsU0FBV0MsT0FDeEJDLFVBQVd4RSxFQUFPeUUsYUFDbEJDLGdCQUFpQjFFLEVBQU8wRSxnQkFDeEJDLE9BQVEzRSxFQUFPNEUsU0FBVzVFLEVBQU9SLEtBQ2pDcUYsUUFBNkIsSUFBckI3RSxFQUFPOEUsVUFDZkMsSUFBS0MsT0FBT2hGLEVBQU8rRSxNQUFRLEVBQzNCRSxRQUFTRCxPQUFPaEYsRUFBT2lGLFVBQVksRUFDbkNDLFFBQVNGLE9BQU9oRixFQUFPa0YsVUFBWSxFQUNuQ0MsT0FBUW5GLEVBQU9tRixPQUNmQyxnQkFBaUJwRixFQUFPb0YsbUJBRXpCQyxPQUFRQyxHQUFXQSxFQUFFVCxRQUViLEVBQUFVLFVBQVksQ0FDdkJDLEVBQ0FDLEVBQ0EvRixFQUNBNEYsR0FDRUksWUFBV0MsZUFBY0MsbUJBRTNCLE1BQU1DLEVBQWlCSixFQUFLSixPQUFRbEIsR0FBV0EsRUFBRVUsUUFDakQsSUFBSWlCLEVBQVUsR0FPZCxPQUxLSCxJQUNIRyxHQUFXRCxFQUFlOUYsSUFBS29FLEdBQVcsSUFBSUEsRUFBRVEsV0FBV29CLEtBQUtMLEdBQ2hFSSxHQUFXLE1BR08sSUFBaEJOLEVBQUtRLFNBQ1RGLEdBQVdOLEVBQ1J6RixJQUFJLENBQUNnRixFQUFVa0IsSUFDZEosRUFDRzlGLElBQUtvRSxJQUNKLElBQUkrQixFQUFjWixFQUFFYSxJQUFJcEIsRUFBS1osRUFBRUUsT0FTL0IsT0FSSUYsRUFBRUssWUFDSjBCLEVBQWMvQixFQUFFSyxVQUNkMEIsRUFDQW5CLEVBQ0FrQixFQUNBOUIsRUFBRU8sa0JBR0ZQLEVBQUVyRixPQUFTeUYsT0FDTixJQUFJLEdBQUcyQixJQUFjbEMsUUFBUSxLQUFNLFNBRXJDa0MsSUFFUkgsS0FBS0wsSUFFVEssS0FBSyxNQUVISCxJQUNIRSxHQUFXLEtBQ1hBLEdBQVdELEVBQ1I5RixJQUFJLENBQUNvRSxFQUFRNUIsS0FDWixHQUF3QixtQkFBYjRCLEVBQUVnQixPQUF1QixDQUNsQyxNQUFNaUIsRUFBYWQsRUFBRWUsTUFBTWIsRUFBTTlGLEVBQVE2QyxHQUFHckMsV0FDNUMsTUFBTyxJQUFJaUUsRUFBRWdCLE9BQU9pQixFQUFZMUcsRUFBUTZDLEdBQUlBLEtBQzlDLENBQU8sT0FBSTRCLEVBQUVpQixnQkFDSixJQUFJakIsRUFBRWlCLGdCQUFnQjFGLEVBQVE2QyxHQUFJQSxNQUVwQyxJQUFJNEIsRUFBRWdCLFlBRWRZLEtBQUtMLEtBbkNvQkksR0F3Q25CLEVBQUFRLEtBQU8sQ0FBQ1IsR0FBZ0JTLFlBQVdDLFdBQVVDLGVBQ3hELFVBQVV0RSxPQUNSLElBQUl4QixLQUFLLENBQUNtRixHQUFVLENBQUVoSCxLQUFNMkgsSUFDNUJELEVBQ0FELEcsK0pDN0VKLGtCQUVBLFVBQWUsQ0FDYkcsYUFBQSxVLCtKQ0ZGLGtCQUNBLFdBRUEsVUFBZSxDQUFFQyxVQUFBLFVBQVdDLGtCQUFBLFUsK0pDQTVCLGtCQWlCQSxVQUFlLENBQ1hDLEVBQTRCLENBQzFCQyxpQkFBaUIsRUFDakJDLGlCQUFhQyxFQUNiQyxjQUFlLEtBQU0sS0FHekIsQ0FDRTNCLEVBQ0E0QixFQUNBQyxLQUVBLE1BQU1DLEVBQWdCLFVBQU1DLGNBQW1CLE1BRS9DLE1BQU1DLFVBQXVCLFVBQU1DLFVBSWpDLFdBQUFDLENBQVk5SSxHQUNWK0ksTUFBTS9JLEdBQ04sSUFBSWdKLEVBQWNoSixFQUFNOEcsS0FDcEIwQixLQUE4QyxLQUExQlMsS0FBS2pKLE1BQU1rSixXQUNqQ1QsRUFBeUJRLEtBQUtqSixNQUFNa0osYUFFcENGLEVBQWNDLEtBQUtFLE9BQU9uSixHQUMxQmlKLEtBQUtHLGdCQUFnQkosR0FBYSxJQUVwQ0MsS0FBS0ksTUFBUSxDQUFFdkMsS0FBTWtDLEVBQ3ZCLENBRUEsV0FBQU0sR0FDRSxPQUFPTCxLQUFLSSxNQUFNdkMsSUFDcEIsQ0FFQSxlQUFBc0MsQ0FBZ0IvRCxFQUFha0UsR0FDdkJwQixFQUFRRSxjQUFnQmtCLEdBQzFCcEIsRUFBUUUsWUFBWWhELEdBRWxCNEQsS0FBS2pKLE1BQU13SixvQkFDYlAsS0FBS2pKLE1BQU13SixtQkFBbUJDLEtBQUssZ0JBQWlCcEUsRUFBT2lDLE9BRS9ELENBRUEsa0JBQUFvQyxDQUFtQkMsR0FDakIsR0FBSUEsRUFBVVQsYUFBZUQsS0FBS2pKLE1BQU1rSixXQUN0QyxHQUFJVixJQUNGQyxFQUF5QlEsS0FBS2pKLE1BQU1rSixnQkFDL0IsQ0FDTCxNQUFNN0QsRUFBUzRELEtBQUtFLE9BQU9GLEtBQUtqSixPQUNoQ2lKLEtBQUtHLGdCQUFnQi9ELEdBQ3JCNEQsS0FBS1csU0FBUyxDQUNaOUMsS0FBTXpCLEdBRVYsTUFFQSxHQUFJbUQsSUFDRzVCLEVBQUVpRCxRQUFRWixLQUFLSSxNQUFNdkMsS0FBTW1DLEtBQUtqSixNQUFNOEcsT0FDekNtQyxLQUFLVyxTQUFTLENBQUU5QyxLQUFNbUMsS0FBS2pKLE1BQU04RyxZQUU5QixJQUFLRixFQUFFaUQsUUFBUUYsRUFBVTdDLEtBQU1tQyxLQUFLakosTUFBTThHLE1BQU8sQ0FDdEQsTUFBTXpCLEVBQVM0RCxLQUFLRSxPQUFPRixLQUFLakosT0FDaENpSixLQUFLRyxnQkFBZ0IvRCxHQUNyQjRELEtBQUtXLFNBQVMsQ0FDWjlDLEtBQU16QixHQUVWLENBRUosQ0FFQSxNQUFBOEQsQ0FBT25KLEdBQ0wsTUFBTSxLQUFFOEcsRUFBSSxRQUFFOUYsR0FBWWhCLEVBQ3BCa0osRUFBYWxKLEVBQU1rSixXQUFXWSxjQUNwQyxPQUFPaEQsRUFBS0gsT0FBTyxDQUFDTixFQUFVMEQsS0FDNUIsSUFBSyxJQUFJQyxFQUFPLEVBQUdBLEVBQU9oSixFQUFRc0csT0FBUTBDLEdBQVEsRUFBRyxDQUNuRCxNQUFNMUksRUFBU04sRUFBUWdKLEdBQ3ZCLElBQTBCLElBQXRCMUksRUFBTzJJLFdBQXNCLFNBQ2pDLElBQUlDLEVBQWN0RCxFQUFFYSxJQUFJcEIsRUFBSy9FLEVBQU9FLFdBV3BDLEdBVklGLEVBQU93RSxXQUFhcUMsRUFBUUMsZ0JBQzlCOEIsRUFBYzVJLEVBQU93RSxVQUNuQm9FLEVBQ0E3RCxFQUNBMEQsRUFDQXpJLEVBQU8wRSxpQkFFQTFFLEVBQU82SSxjQUNoQkQsRUFBYzVJLEVBQU82SSxZQUFZRCxFQUFhN0QsSUFFNUM4QixFQUFRSSxlQUNWLEdBQ0VKLEVBQVFJLGNBQWMsQ0FDcEJXLGFBQ0FrQixNQUFPRixFQUNQNUksU0FDQStFLFFBR0YsT0FBTyxPQUdULEdBQUk2RCxVQUNGQSxFQUFjQSxFQUFZRyxXQUFXUCxjQUNqQ0ksRUFBWUksUUFBUXBCLElBQWUsR0FDckMsT0FBTyxDQUlmLENBQ0EsT0FBTyxHQUVYLENBRUEsTUFBQXFCLEdBQ0UsT0FDRSx3QkFBQzdCLEVBQWM4QixTQUFRLENBQUNKLE1BQU8sQ0FBRXRELEtBQU1tQyxLQUFLSSxNQUFNdkMsT0FDL0NtQyxLQUFLakosTUFBTUUsU0FHbEIsRUFHRixNQUFPLENBQ0xzSyxTQUFVNUIsRUFDVjZCLFNBQVUvQixFQUFjK0IsVSwrSkM5STlCLGtCQUVBLFVBQWUsQ0FBRTFKLFdBQUEsVSxhQ1lmekIsRUFBT0QsUUFBVSxFQUFRLElBQVIsRSwrSkNoQm5CLGtCQUdBLFlBQ0EsWUFFTXFMLEVBQWlCLFVBQU0vQixjQUFrQyxDQUM3RGdDLFlBQWEsQ0FDWHpCLFdBQVksR0FDWjBCLFNBQVdDLE1BQ1hoSyxRQUFTLFFBRVhpSyxTQUFVLENBQ1I3SyxTQUFVLFFBRVo4SyxrQkFBbUIsQ0FDakIvSixRQUFTLEdBQ1RFLFFBQVMsR0FDVEQsZUFBaUJPLE9BRW5Cd0osVUFBVyxDQUNUQyxjQUFVM0MsRUFDVnRILFFBQVMsR0FDVDhGLEtBQU0sR0FDTm9FLGdCQUFZNUMsS0FJaEIsTUFBTTZDLFdBQXdCLGFBQW1CLFVBQU10QyxZQXVDckQsV0FBQUMsQ0FBWTlJLEdBQ1YrSSxNQUFNL0ksR0FDTixNQUFNb0wsRUFBZSxDQUNuQkMsYUFBYyxDQUFDLEVBQ2ZuQyxXQUMwQixpQkFBakJsSixFQUFNbUosUUFDVG5KLEVBQU1tSixPQUFPbUMsZUFDYixJQUVSckMsS0FBS3JDLEVBQUksS0FDVHFDLEtBQUtwSSxRQUFVb0ksS0FBS3BJLFFBQVEwSyxLQUFLdEMsTUFDakNBLEtBQUsyQixTQUFXM0IsS0FBSzJCLFNBQVNXLEtBQUt0QyxNQUNuQ0EsS0FBS2hJLGVBQWlCZ0ksS0FBS2hJLGVBQWVzSyxLQUFLdEMsTUFDL0NBLEtBQUt1QyxxQkFBdUJ2QyxLQUFLdUMscUJBQXFCRCxLQUFLdEMsTUFFdkRqSixFQUFNcUwsZUFDUkQsRUFBYUMsYUFBZXJMLEVBQU1nQixRQUFReUssT0FDeEMsQ0FBQ0MsRUFBVXBLLEtBQ1RvSyxFQUFJcEssRUFBT0UsWUFBY0YsRUFBT3FLLE9BQ3pCRCxHQUVULENBQUMsSUFHTE4sRUFBYWxDLFdBQ2EsaUJBQWpCbEosRUFBTW1KLFFBQXNCbkosRUFBTW1KLE9BQU9tQyxlQUFzQixHQUN4RXJDLEtBQUtJLE1BQVErQixDQUNmLENBRUEsK0JBQU9RLENBQXlCNUwsRUFBMEJxSixHQUN4RCxNQUFNd0MsRUFBbUJ4QyxFQUFNZ0MsYUFDL0IsSUFBSVMsRUFTSixPQVBFQSxFQURFOUwsRUFBTXFMLGFBQ1lyTCxFQUFNZ0IsUUFBUXlLLE9BQU8sQ0FBQ0MsRUFBVXBLLEtBQ2xEb0ssRUFBSXBLLEVBQU9FLFlBQWNGLEVBQU9xSyxPQUN6QkQsR0FDTixDQUFDLEdBRWdCLENBQUMsRUFFbkJHLEVBQ0ssSUFDRnhDLEVBQ0h3QyxvQkFHSyxJQUNGeEMsRUFDSHlDLG9CQUdOLENBRUEsUUFBQWxCLENBQVMxQixHQUNIQSxJQUFlRCxLQUFLSSxNQUFNSCxZQUM1QkQsS0FBS1csU0FBUyxDQUFFVixjQUVwQixDQUVBLE9BQUFySSxHQUNFb0ksS0FBS1csU0FBUyxDQUFFVixXQUFZLElBQzlCLENBRUEsY0FBQWpJLENBQWVPLEdBQ2IsTUFBTSxhQUFFNkosR0FBaUJwQyxLQUFLSSxNQUM5QmdDLEVBQWE3SixJQUFjNkosRUFBYTdKLEdBQ3hDeUgsS0FBS1csU0FBUyxJQUNUWCxLQUFLSSxNQUNSZ0MsZ0JBRUosQ0FTQSxvQkFBQUcsQ0FBcUI1RSxHQUNuQnFDLEtBQUtyQyxFQUFJQSxDQUNYLENBRUEsTUFBQTJELEdBQ0UsTUFBTVMsRUFBK0IsQ0FDbkNDLFNBQVVoQyxLQUFLakosTUFBTWlMLFNBQ3JCakssUUFBU2lJLEtBQUtqSixNQUFNZ0IsUUFDcEI4RixLQUFNbUMsS0FBS2pKLE1BQU04RyxLQUNqQnFDLE9BQVFGLEtBQUtqSixNQUFNbUosU0FBVSxFQUM3QjRDLFVBQVc5QyxLQUFLakosTUFBTStMLFlBQWEsRUFDbkNiLFdBQVlqQyxLQUFLakosTUFBTWtMLGFBQWMsRUFDckNoTCxTQUFVK0ksS0FBS2pKLE1BQU1FLFNBQ3JCc0wscUJBQXNCdkMsS0FBS3VDLHFCQUMzQlEsbUJBQW9CL0MsS0FBSytDLG9CQWEzQixPQVhJL0MsS0FBS2pKLE1BQU1tSixTQUNiNkIsRUFBVTdCLE9BQVMsQ0FDakI4QyxlQUFlLGFBQW9CaEQsS0FBS2pKLE1BQU1tSixRQUM5Q0QsV0FBWUQsS0FBS0ksTUFBTUgsYUFHdkJELEtBQUtqSixNQUFNcUwsZUFDYkwsRUFBVUssYUFBZSxDQUN2Qm5LLFFBQVMrSCxLQUFLSSxNQUFNZ0MsZUFJdEIsd0JBQUNYLEVBQWVGLFNBQVEsQ0FDdEJKLE1BQU8sQ0FDTE8sWUFBYSxDQUNYekIsV0FBWUQsS0FBS0ksTUFBTUgsV0FDdkIwQixTQUFVM0IsS0FBSzJCLFNBQ2YvSixRQUFTb0ksS0FBS3BJLFNBRWhCaUssU0FBVSxDQUNSN0ssU0FBVWdKLEtBQUtpRCxpQkFFakJuQixrQkFBbUIsQ0FDakIvSixRQUFTaUksS0FBS2pKLE1BQU1nQixRQUNwQkUsUUFBUytILEtBQUtJLE1BQU1nQyxhQUNwQnBLLGVBQWdCZ0ksS0FBS2hJLGdCQUV2QitKLGNBR0QvQixLQUFLakosTUFBTUUsU0FHbEIsRUFHRixVQUFlLENBQ2JzSyxTQUFVVyxFQUNWVixTQUFVQyxFQUFlRCxTLDJOQ3RNM0Isa0JBQ0EsWUFFQSxVQUFlLFVBQ0YsRUFBQUMsZUFBaUIsVUFFOUIsYUFBUyxpRkFBQXlCLE9BQU8sSUFDaEIsYUFBUyw4RUFBQUEsT0FBTyxJQUNoQixhQUFTLDJFQUFBQSxPQUFPLEcsMEJDRmhCLElBQUlDLEVBQXVCLEVBQVEsS0FFbkMsU0FBU0MsSUFBaUIsQ0FDMUIsU0FBU0MsSUFBMEIsQ0FDbkNBLEVBQXVCQyxrQkFBb0JGLEVBRTNDL00sRUFBT0QsUUFBVSxXQUNmLFNBQVNtTixFQUFLeE0sRUFBT3lNLEVBQVVDLEVBQWVuSSxFQUFVb0ksRUFBY0MsR0FDcEUsR0FBSUEsSUFBV1IsRUFBZixDQUlBLElBQUlTLEVBQU0sSUFBSUMsTUFDWixtTEFLRixNQURBRCxFQUFJM0ksS0FBTyxzQkFDTDJJLENBUE4sQ0FRRixDQUVBLFNBQVNFLElBQ1AsT0FBT1AsQ0FDVCxDQUhBQSxFQUFLaE0sV0FBYWdNLEVBTWxCLElBQUlRLEVBQWlCLENBQ25CdEwsTUFBTzhLLEVBQ1BTLE9BQVFULEVBQ1JVLEtBQU1WLEVBQ04vTCxLQUFNK0wsRUFDTlcsT0FBUVgsRUFDUjdMLE9BQVE2TCxFQUNSOUwsT0FBUThMLEVBQ1JZLE9BQVFaLEVBRVJhLElBQUtiLEVBQ0xjLFFBQVNQLEVBQ1RRLFFBQVNmLEVBQ1RnQixZQUFhaEIsRUFDYmlCLFdBQVlWLEVBQ1p4TSxLQUFNaU0sRUFDTmtCLFNBQVVYLEVBQ1ZZLE1BQU9aLEVBQ1BhLFVBQVdiLEVBQ1hjLE1BQU9kLEVBQ1BlLE1BQU9mLEVBRVBnQixlQUFnQnpCLEVBQ2hCQyxrQkFBbUJGLEdBS3JCLE9BRkFXLEVBQWVnQixVQUFZaEIsRUFFcEJBLENBQ1QsQywrSkM5REEsa0JBR01pQixFQUFpQixDQUNyQnhOLEVBQ0F5TixFQUNBQyxLQUVBLElBQUlDLEVBRUosTUFBTyxJQUFJQyxLQUNULE1BUU1DLEVBQVVILElBQWNDLEVBRTlCRyxhQUFhSCxHQUViQSxFQUFVMUosV0FaSSxLQUNaMEosT0FBVTlGLEVBRUw2RixHQUNIMU4sRUFBSytOLE1BQU12RixLQUFNb0YsSUFRT0gsR0FBUSxHQUVoQ0ksR0FDRjdOLEVBQUsrTixNQUFNdkYsS0FBTW9GLEtBU3ZCLE1BQU1wRyxVQUFrQixVQUFNWSxVQUc1QixXQUFBQyxDQUFZOUksR0FDVitJLE1BQU0vSSxHQUhSLEtBQUF5TyxNQUFpQyxLQVNqQyxLQUFBQyxjQUFpQjVMLElBQ2ZtRyxLQUFLVyxTQUFTLENBQUVRLE1BQU90SCxFQUFFMEIsT0FBTzRGLFNBR2xDLEtBQUF1RSxRQUFVLEtBQ1IsTUFBTSxNQUFFQyxFQUFRLElBQUcsU0FBRWhFLEdBQWEzQixLQUFLakosTUFDZGlPLEVBQWUsS0FDdENyRCxFQUFVM0IsS0FBS3dGLE9BQU9yRSxPQUFTLEtBQzlCd0UsRUFDSEMsSUFkQTVGLEtBQUtJLE1BQVEsQ0FDWGUsTUFBT3BLLEVBQU1rSixZQUFjLEdBRS9CLENBY0Esa0JBQUFRLENBQW1CQyxHQUNiVixLQUFLakosTUFBTWtKLGFBQWVTLEVBQVVULFlBQ3RDRCxLQUFLVyxTQUFTLENBQUVRLE1BQU9uQixLQUFLakosTUFBTWtKLFlBQWMsSUFFcEQsQ0FFQSxNQUFBcUIsR0FDRSxNQUFNLFVBQ0oxSyxFQUFZLEdBQUUsTUFDZEMsRUFBUSxDQUFDLEVBQUMsWUFDVmdQLEVBQWMsU0FBUSxRQUN0QkMsRUFBVSxJQUFHLFdBQ2I3RixFQUFhLHFCQUNYRCxLQUFLakosTUFFVCxPQUNFLGlDQUFPZ1AsUUFBUyxjQUFjRCxJQUFXbFAsVUFBVSxnQkFDakQsZ0NBQU1vUCxHQUFJLGNBQWNGLFVBQWlCbFAsVUFBVSxXQUNoRHFKLEdBRUgsaUNBQ0VnRyxJQUFNQyxJQUFRbEcsS0FBS3dGLE1BQVFVLEdBQzNCRixHQUFJLGNBQWNGLElBQ2xCM08sS0FBSyxPQUNMTixNQUFPQSxFQUFZLGtCQUNGLGNBQWNpUCxVQUMvQkssUUFBUyxJQUFNbkcsS0FBSzBGLFVBQ3BCVSxTQUFVcEcsS0FBS3lGLGNBQ2Y3TyxVQUFXLGdCQUFnQkEsSUFDM0J1SyxNQUFPbkIsS0FBS0ksTUFBTWUsTUFDbEIwRSxZQUFhQSxJQUlyQixFQXdCRixVQUFlN0csQywrSkNuSGYsa0JBRUEsVUFBZ0JxSCxHQUNkLGNBQWlDLFVBQVV0SCxhQUFhc0gsSUFBeEQsYyxvQkFDRSxLQUFBdEQsbUJBQXNCdUQsSUFDcEJ0RyxLQUFLc0csdUJBQXlCQSxFQUVsQyxFLCtKQ1RGLGtCQUVBLFNBRU1DLEVBQW9CLENBQ3hCMUgsU0FBVSxrQkFDVmQsVUFBVyxJQUNYQyxjQUFjLEVBQ2RDLGNBQWMsRUFDZFcsV0FBVyxFQUNYRSxTQUFVLDJCQUNWMEgsV0FBVyxFQUNYQyxxQkFBcUIsR0FHdkIsVUFBZ0JKLEdBQ2QsY0FBMkIsVUFBTXpHLFVBQWpDLGMsb0JBSUUsS0FBQXFELGdCQUFtQnlELElBQ2pCLE1BQU0sUUFBRTNPLEVBQU8sVUFBRStLLEVBQVMsU0FBRWQsR0FBYWhDLEtBQUtqSixNQUN4QytHLEdBQU8sSUFBQXJCLGFBQVkxRSxHQUNuQm1ILEdBQ1UsSUFBZDRELEVBQ0l5RCxFQUNBLElBQ0tBLEtBQ0F6RCxHQUlYLElBQUlqRixFQUNKLFFBQXNCLElBQVg2SSxFQUNUN0ksRUFBTzZJLE9BQ0YsR0FBSXhILEVBQVFzSCxVQUNqQjNJLEVBQU9tQyxLQUFLakosTUFBTThHLFVBQ2IsR0FBSXFCLEVBQVF5SCxtQkFBb0IsQ0FDckMsTUFBTUMsRUFBMkIsQ0FBRXhLLFlBQVFpRCxHQUMzQ1csS0FBS3NHLHVCQUF1QjlGLEtBQUssb0JBQXFCb0csR0FDdEQvSSxFQUFPK0ksRUFBUXhLLE1BQ2pCLEtBQU8sQ0FDTCxNQUFNd0ssRUFBVSxDQUFFeEssWUFBUWlELEdBQzFCVyxLQUFLc0csdUJBQXVCOUYsS0FBSyxpQkFBa0JvRyxHQUNuRC9JLEVBQU8rSSxFQUFReEssTUFDakIsQ0FHQSxHQUFJOEMsRUFBUXVILG9CQUFxQixDQUMvQixNQUFNRyxFQUFVLENBQUV4SyxZQUFRaUQsR0FDMUJXLEtBQUtzRyx1QkFBdUI5RixLQUFLLG9CQUFxQm9HLEdBQ3RELE1BQU1DLEVBQWFELEVBQVF4SyxRQUFVLEdBRXJDeUIsRUFBT0EsRUFBS0gsT0FBUU4sR0FBYXlKLEVBQVdDLFNBQVMxSixFQUFJNEUsSUFDM0QsQ0FFQSxNQUFNN0QsR0FBVSxJQUFBUCxXQUFVQyxFQUFNQyxFQUFNL0YsRUFBU2lJLEtBQUtyQyxFQUFHdUIsSUFDdkQsSUFBQVAsTUFBS1IsRUFBU2UsR0FFbEIsRSwrSkMzREYsa0JBQ0EsWUFHQSxZQUVNNkgsRUFDSmhRLEdBRUEsd0JBQUMsVUFBZXdLLFNBQVEsSUFBS3hLLEdBQzNCLHdCQUFDLFVBQWV5SyxTQUFRLEtBQ3BCd0YsR0FBaUJqUSxFQUFNRSxTQUFTK1AsS0FLeENELEVBQWdCMVAsVUFBWSxDQUMxQkosU0FBVSxVQUFVTyxLQUFLRCxZQUczQixVQUFld1AsQyxzQkNUZjFRLEVBQU9ELFFBRm9CLDhDLEdDUnZCNlEsRUFBMkIsQ0FBQyxFQUdoQyxTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUgsRUFBeUJFLEdBQzVDLFFBQXFCOUgsSUFBakIrSCxFQUNILE9BQU9BLEVBQWFoUixRQUdyQixJQUFJQyxFQUFTNFEsRUFBeUJFLEdBQVksQ0FHakQvUSxRQUFTLENBQUMsR0FPWCxPQUhBaVIsRUFBb0JGLEdBQVVHLEtBQUtqUixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTOFEsR0FHcEU3USxFQUFPRCxPQUNmLEMsT0N0QkE4USxFQUFvQjNOLEVBQUksV0FDdkIsR0FBMEIsaUJBQWZnTyxXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU92SCxNQUFRLElBQUl3SCxTQUFTLGNBQWIsRUFDaEIsQ0FBRSxNQUFPM04sR0FDUixHQUFzQixpQkFBWE0sT0FBcUIsT0FBT0EsTUFDeEMsQ0FDQSxDQVB1QixHQ0dFK00sRUFBb0IsSSIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2Nzdi9idXR0b24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9zZWFyY2gvY2xlYXItYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY29sdW1uLXRvZ2dsZS90b2dnbGUtbGlzdC50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZpbGUtc2F2ZXIvZGlzdC9GaWxlU2F2ZXIubWluLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jc3YvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jc3YvZXhwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL29wL2luZGV4LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9zZWFyY2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY29sdW1uLXRvZ2dsZS9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9TZWFyY2hCYXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3N0YXRlbGVzc09wLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9vcC9jc3YudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvcHJvdmlkZXIudHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJyZWFjdFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdUb29sa2l0XCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1Rvb2xraXRcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSk7XG59KShzZWxmLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18pID0+IHtcbnJldHVybiAiLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEV4cG9ydENTVkJ1dHRvblByb3BzIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmNvbnN0IGV4cG9ydENTVkJ1dHRvbkRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiBcIlwiLFxuICBzdHlsZToge30sXG59O1xuXG5jb25zdCBFeHBvcnRDU1ZCdXR0b24gPSAoXG4gIHByb3BzOiBFeHBvcnRDU1ZCdXR0b25Qcm9wc1xuKTogUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbCA9PiB7XG4gIGNvbnN0IHsgb25FeHBvcnQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIC4uLnJlc3QgfSA9IHsgLi4uZXhwb3J0Q1NWQnV0dG9uRGVmYXVsdFByb3BzLCAuLi5wcm9wcyB9O1xuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2ByZWFjdC1icy10YWJsZS1jc3YtYnRuIGJ0biBidG4tZGVmYXVsdCAke2NsYXNzTmFtZX1gfVxuICAgICAgb25DbGljaz17KCkgPT4gb25FeHBvcnQoKX1cbiAgICAgIHsuLi5yZXN0fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn07XG5cbkV4cG9ydENTVkJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICBvbkV4cG9ydDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEV4cG9ydENTVkJ1dHRvbjtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENsZWFyU2VhcmNoQnV0dG9uUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgQ2xlYXJCdXR0b24gPSAoe1xuICBvbkNsZWFyLFxuICB0ZXh0ID0gXCJDbGVhclwiLFxuICBjbGFzc05hbWUgPSBcIlwiLFxufTogQ2xlYXJTZWFyY2hCdXR0b25Qcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGwgPT4gKFxuICA8YnV0dG9uIGNsYXNzTmFtZT17YGJ0biBidG4tZGVmYXVsdCAke2NsYXNzTmFtZX1gfSBvbkNsaWNrPXtvbkNsZWFyfT5cbiAgICB7dGV4dH1cbiAgPC9idXR0b24+XG4pO1xuXG5DbGVhckJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbi8vIENsZWFyQnV0dG9uLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgdGV4dDogXCJDbGVhclwiLFxuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBDbGVhckJ1dHRvbjtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENvbHVtbkRlc2NyaXB0aW9uIH0gZnJvbSBcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZ1wiO1xuaW1wb3J0IHsgVG9nZ2xlTGlzdFByb3BzIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmNvbnN0IFRvZ2dsZUxpc3QgPSAoe1xuICBjb2x1bW5zLFxuICBvbkNvbHVtblRvZ2dsZSxcbiAgdG9nZ2xlcyxcbiAgYnRuQ2xhc3NOYW1lID0gXCJcIixcbiAgY2xhc3NOYW1lID0gXCJcIixcbiAgY29udGV4dHVhbCA9IFwicHJpbWFyeVwiXG59OiBUb2dnbGVMaXN0UHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT17YGJ0bi1ncm91cCBidG4tZ3JvdXAtdG9nZ2xlICR7Y2xhc3NOYW1lfWB9XG4gICAgZGF0YS10b2dnbGU9XCJidXR0b25zXCJcbiAgPlxuICAgIHtjb2x1bW5zXG4gICAgICAubWFwKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uKSA9PiAoe1xuICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgIHRvZ2dsZTogdG9nZ2xlc1tjb2x1bW4uZGF0YUZpZWxkXSxcbiAgICAgIH0pKVxuICAgICAgLm1hcCgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbikgPT4gKFxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAga2V5PXtjb2x1bW4uZGF0YUZpZWxkfVxuICAgICAgICAgIGNsYXNzTmFtZT17YCR7YnRuQ2xhc3NOYW1lfSBidG4gYnRuLSR7Y29udGV4dHVhbH0gJHtcbiAgICAgICAgICAgIGNvbHVtbi50b2dnbGUgPyBcImFjdGl2ZVwiIDogXCJcIlxuICAgICAgICAgIH1gfVxuICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBhcmlhLXByZXNzZWQ9e2NvbHVtbi50b2dnbGUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNvbHVtblRvZ2dsZShjb2x1bW4uZGF0YUZpZWxkKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjb2x1bW4udGV4dH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICApKX1cbiAgPC9kaXY+XG4pO1xuXG5Ub2dnbGVMaXN0LnByb3BUeXBlcyA9IHtcbiAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIHRvZ2dsZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgb25Db2x1bW5Ub2dnbGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGJ0bkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb250ZXh0dWFsOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuLy8gVG9nZ2xlTGlzdC5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGJ0bkNsYXNzTmFtZTogXCJcIixcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICBjb250ZXh0dWFsOiBcInByaW1hcnlcIixcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IFRvZ2dsZUxpc3Q7XG4iLCIoZnVuY3Rpb24oYSxiKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLGIpO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGV4cG9ydHMpYigpO2Vsc2V7YigpLGEuRmlsZVNhdmVyPXtleHBvcnRzOnt9fS5leHBvcnRzfX0pKHRoaXMsZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGEsYil7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIGI/Yj17YXV0b0JvbTohMX06XCJvYmplY3RcIiE9dHlwZW9mIGImJihjb25zb2xlLndhcm4oXCJEZXByZWNhdGVkOiBFeHBlY3RlZCB0aGlyZCBhcmd1bWVudCB0byBiZSBhIG9iamVjdFwiKSxiPXthdXRvQm9tOiFifSksYi5hdXRvQm9tJiYvXlxccyooPzp0ZXh0XFwvXFxTKnxhcHBsaWNhdGlvblxcL3htbHxcXFMqXFwvXFxTKlxcK3htbClcXHMqOy4qY2hhcnNldFxccyo9XFxzKnV0Zi04L2kudGVzdChhLnR5cGUpP25ldyBCbG9iKFtcIlxcdUZFRkZcIixhXSx7dHlwZTphLnR5cGV9KTphfWZ1bmN0aW9uIGMoYSxiLGMpe3ZhciBkPW5ldyBYTUxIdHRwUmVxdWVzdDtkLm9wZW4oXCJHRVRcIixhKSxkLnJlc3BvbnNlVHlwZT1cImJsb2JcIixkLm9ubG9hZD1mdW5jdGlvbigpe2coZC5yZXNwb25zZSxiLGMpfSxkLm9uZXJyb3I9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiY291bGQgbm90IGRvd25sb2FkIGZpbGVcIil9LGQuc2VuZCgpfWZ1bmN0aW9uIGQoYSl7dmFyIGI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Iub3BlbihcIkhFQURcIixhLCExKTt0cnl7Yi5zZW5kKCl9Y2F0Y2goYSl7fXJldHVybiAyMDA8PWIuc3RhdHVzJiYyOTk+PWIuc3RhdHVzfWZ1bmN0aW9uIGUoYSl7dHJ5e2EuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudChcImNsaWNrXCIpKX1jYXRjaChjKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRzXCIpO2IuaW5pdE1vdXNlRXZlbnQoXCJjbGlja1wiLCEwLCEwLHdpbmRvdywwLDAsMCw4MCwyMCwhMSwhMSwhMSwhMSwwLG51bGwpLGEuZGlzcGF0Y2hFdmVudChiKX19dmFyIGY9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LndpbmRvdz09PXdpbmRvdz93aW5kb3c6XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYuc2VsZj09PXNlbGY/c2VsZjpcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwuZ2xvYmFsPT09Z2xvYmFsP2dsb2JhbDp2b2lkIDAsYT1mLm5hdmlnYXRvciYmL01hY2ludG9zaC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmL0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhL1NhZmFyaS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxnPWYuc2F2ZUFzfHwoXCJvYmplY3RcIiE9dHlwZW9mIHdpbmRvd3x8d2luZG93IT09Zj9mdW5jdGlvbigpe306XCJkb3dubG9hZFwiaW4gSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlJiYhYT9mdW5jdGlvbihiLGcsaCl7dmFyIGk9Zi5VUkx8fGYud2Via2l0VVJMLGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7Zz1nfHxiLm5hbWV8fFwiZG93bmxvYWRcIixqLmRvd25sb2FkPWcsai5yZWw9XCJub29wZW5lclwiLFwic3RyaW5nXCI9PXR5cGVvZiBiPyhqLmhyZWY9YixqLm9yaWdpbj09PWxvY2F0aW9uLm9yaWdpbj9lKGopOmQoai5ocmVmKT9jKGIsZyxoKTplKGosai50YXJnZXQ9XCJfYmxhbmtcIikpOihqLmhyZWY9aS5jcmVhdGVPYmplY3RVUkwoYiksc2V0VGltZW91dChmdW5jdGlvbigpe2kucmV2b2tlT2JqZWN0VVJMKGouaHJlZil9LDRFNCksc2V0VGltZW91dChmdW5jdGlvbigpe2Uoail9LDApKX06XCJtc1NhdmVPck9wZW5CbG9iXCJpbiBuYXZpZ2F0b3I/ZnVuY3Rpb24oZixnLGgpe2lmKGc9Z3x8Zi5uYW1lfHxcImRvd25sb2FkXCIsXCJzdHJpbmdcIiE9dHlwZW9mIGYpbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYihmLGgpLGcpO2Vsc2UgaWYoZChmKSljKGYsZyxoKTtlbHNle3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2kuaHJlZj1mLGkudGFyZ2V0PVwiX2JsYW5rXCIsc2V0VGltZW91dChmdW5jdGlvbigpe2UoaSl9KX19OmZ1bmN0aW9uKGIsZCxlLGcpe2lmKGc9Z3x8b3BlbihcIlwiLFwiX2JsYW5rXCIpLGcmJihnLmRvY3VtZW50LnRpdGxlPWcuZG9jdW1lbnQuYm9keS5pbm5lclRleHQ9XCJkb3dubG9hZGluZy4uLlwiKSxcInN0cmluZ1wiPT10eXBlb2YgYilyZXR1cm4gYyhiLGQsZSk7dmFyIGg9XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIj09PWIudHlwZSxpPS9jb25zdHJ1Y3Rvci9pLnRlc3QoZi5IVE1MRWxlbWVudCl8fGYuc2FmYXJpLGo9L0NyaU9TXFwvW1xcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2lmKChqfHxoJiZpfHxhKSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZpbGVSZWFkZXIpe3ZhciBrPW5ldyBGaWxlUmVhZGVyO2sub25sb2FkZW5kPWZ1bmN0aW9uKCl7dmFyIGE9ay5yZXN1bHQ7YT1qP2E6YS5yZXBsYWNlKC9eZGF0YTpbXjtdKjsvLFwiZGF0YTphdHRhY2htZW50L2ZpbGU7XCIpLGc/Zy5sb2NhdGlvbi5ocmVmPWE6bG9jYXRpb249YSxnPW51bGx9LGsucmVhZEFzRGF0YVVSTChiKX1lbHNle3ZhciBsPWYuVVJMfHxmLndlYmtpdFVSTCxtPWwuY3JlYXRlT2JqZWN0VVJMKGIpO2c/Zy5sb2NhdGlvbj1tOmxvY2F0aW9uLmhyZWY9bSxnPW51bGwsc2V0VGltZW91dChmdW5jdGlvbigpe2wucmV2b2tlT2JqZWN0VVJMKG0pfSw0RTQpfX0pO2Yuc2F2ZUFzPWcuc2F2ZUFzPWcsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSYmKG1vZHVsZS5leHBvcnRzPWcpfSk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZpbGVTYXZlci5taW4uanMubWFwIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgRXhwb3J0Q1NWQnV0dG9uIGZyb20gJy4vYnV0dG9uJztcblxuZXhwb3J0IGRlZmF1bHQgeyBFeHBvcnRDU1ZCdXR0b24gfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX187IiwiLyogZXNsaW50IG5vLXVubmVlZGVkLXRlcm5hcnk6IDAgKi9cbmltcG9ydCBGaWxlU2F2ZXIgZnJvbSBcImZpbGUtc2F2ZXJcIjtcblxuZXhwb3J0IGNvbnN0IGdldE1ldGFJbmZvID0gKGNvbHVtbnM6IGFueSkgPT5cbiAgY29sdW1uc1xuICAgIC5tYXAoKGNvbHVtbjogYW55KSA9PiAoe1xuICAgICAgZmllbGQ6IGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICB0eXBlOiBjb2x1bW4uY3N2VHlwZSB8fCBTdHJpbmcsXG4gICAgICBmb3JtYXR0ZXI6IGNvbHVtbi5jc3ZGb3JtYXR0ZXIsXG4gICAgICBmb3JtYXRFeHRyYURhdGE6IGNvbHVtbi5mb3JtYXRFeHRyYURhdGEsXG4gICAgICBoZWFkZXI6IGNvbHVtbi5jc3ZUZXh0IHx8IGNvbHVtbi50ZXh0LFxuICAgICAgZXhwb3J0OiBjb2x1bW4uY3N2RXhwb3J0ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgIHJvdzogTnVtYmVyKGNvbHVtbi5yb3cpIHx8IDAsXG4gICAgICByb3dTcGFuOiBOdW1iZXIoY29sdW1uLnJvd1NwYW4pIHx8IDEsXG4gICAgICBjb2xTcGFuOiBOdW1iZXIoY29sdW1uLmNvbFNwYW4pIHx8IDEsXG4gICAgICBmb290ZXI6IGNvbHVtbi5mb290ZXIsXG4gICAgICBmb290ZXJGb3JtYXR0ZXI6IGNvbHVtbi5mb290ZXJGb3JtYXR0ZXIsXG4gICAgfSkpXG4gICAgLmZpbHRlcigoXzogYW55KSA9PiBfLmV4cG9ydCk7XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm0gPSAoXG4gIGRhdGE6IGFueSxcbiAgbWV0YTogYW55LFxuICBjb2x1bW5zOiBhbnksXG4gIF86IGFueSxcbiAgeyBzZXBhcmF0b3IsIGlnbm9yZUhlYWRlciwgaWdub3JlRm9vdGVyIH06IGFueVxuKSA9PiB7XG4gIGNvbnN0IHZpc2libGVDb2x1bW5zID0gbWV0YS5maWx0ZXIoKG06IGFueSkgPT4gbS5leHBvcnQpO1xuICBsZXQgY29udGVudCA9IFwiXCI7XG4gIC8vIGV4dHJhY3QgY3N2IGhlYWRlclxuICBpZiAoIWlnbm9yZUhlYWRlcikge1xuICAgIGNvbnRlbnQgKz0gdmlzaWJsZUNvbHVtbnMubWFwKChtOiBhbnkpID0+IGBcIiR7bS5oZWFkZXJ9XCJgKS5qb2luKHNlcGFyYXRvcik7XG4gICAgY29udGVudCArPSBcIlxcblwiO1xuICB9XG4gIC8vIGV4dHJhY3QgY3N2IGJvZHlcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gY29udGVudDtcbiAgY29udGVudCArPSBkYXRhXG4gICAgLm1hcCgocm93OiBhbnksIHJvd0luZGV4OiBhbnkpID0+XG4gICAgICB2aXNpYmxlQ29sdW1uc1xuICAgICAgICAubWFwKChtOiBhbnkpID0+IHtcbiAgICAgICAgICBsZXQgY2VsbENvbnRlbnQgPSBfLmdldChyb3csIG0uZmllbGQpO1xuICAgICAgICAgIGlmIChtLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgY2VsbENvbnRlbnQgPSBtLmZvcm1hdHRlcihcbiAgICAgICAgICAgICAgY2VsbENvbnRlbnQsXG4gICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgIG0uZm9ybWF0RXh0cmFEYXRhXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobS50eXBlID09PSBTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBgXCIke2Ake2NlbGxDb250ZW50fWAucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjZWxsQ29udGVudDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oc2VwYXJhdG9yKVxuICAgIClcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBpZiAoIWlnbm9yZUZvb3Rlcikge1xuICAgIGNvbnRlbnQgKz0gXCJcXG5cIjtcbiAgICBjb250ZW50ICs9IHZpc2libGVDb2x1bW5zXG4gICAgICAubWFwKChtOiBhbnksIGk6IGFueSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIG0uZm9vdGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gXy5wbHVjayhkYXRhLCBjb2x1bW5zW2ldLmRhdGFGaWVsZCk7XG4gICAgICAgICAgcmV0dXJuIGBcIiR7bS5mb290ZXIoY29sdW1uRGF0YSwgY29sdW1uc1tpXSwgaSl9XCJgO1xuICAgICAgICB9IGVsc2UgaWYgKG0uZm9vdGVyRm9ybWF0dGVyKSB7XG4gICAgICAgICAgcmV0dXJuIGBcIiR7bS5mb290ZXJGb3JtYXR0ZXIoY29sdW1uc1tpXSwgaSl9XCJgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgXCIke20uZm9vdGVyfVwiYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihzZXBhcmF0b3IpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IHNhdmUgPSAoY29udGVudDogYW55LCB7IG5vQXV0b0JPTSwgZmlsZU5hbWUsIGJsb2JUeXBlIH06IGFueSkgPT4ge1xuICBGaWxlU2F2ZXIuc2F2ZUFzKFxuICAgIG5ldyBCbG9iKFtjb250ZW50XSwgeyB0eXBlOiBibG9iVHlwZSB9KSxcbiAgICBmaWxlTmFtZSxcbiAgICBub0F1dG9CT01cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjc3ZPcGVyYXRpb24gZnJvbSAnLi9jc3YnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNzdk9wZXJhdGlvblxufTtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IFNlYXJjaEJhciBmcm9tICcuL1NlYXJjaEJhcic7XG5pbXBvcnQgQ2xlYXJTZWFyY2hCdXR0b24gZnJvbSAnLi9jbGVhci1idXR0b24nO1xuXG5leHBvcnQgZGVmYXVsdCB7IFNlYXJjaEJhciwgQ2xlYXJTZWFyY2hCdXR0b24gfTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tY29udGludWU6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cbi8qIGVzbGludCBjbGFzcy1tZXRob2RzLXVzZS10aGlzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTZWFyY2hNYXRjaFByb3BzLCBUYWJsZVNlYXJjaFByb3BzIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmludGVyZmFjZSBEYXRhQ2hhbmdlTGlzdGVuZXIge1xuICBlbWl0OiAoZXZlbnQ6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIFNlYXJjaFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBTZWFyY2hNYXRjaFByb3BzIHtcbiAgZGF0YTogYW55W107XG4gIGRhdGFDaGFuZ2VMaXN0ZW5lcj86IERhdGFDaGFuZ2VMaXN0ZW5lcjtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuaW50ZXJmYWNlIFNlYXJjaFByb3ZpZGVyU3RhdGUge1xuICBkYXRhOiBhbnlbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFxuICAgIG9wdGlvbnM6IFRhYmxlU2VhcmNoUHJvcHMgPSB7XG4gICAgICBzZWFyY2hGb3JtYXR0ZWQ6IGZhbHNlLFxuICAgICAgYWZ0ZXJTZWFyY2g6IHVuZGVmaW5lZCxcbiAgICAgIG9uQ29sdW1uTWF0Y2g6ICgpID0+IGZhbHNlLFxuICAgIH1cbiAgKSA9PlxuICAoXG4gICAgXzogYW55LFxuICAgIGlzUmVtb3RlU2VhcmNoOiAoKSA9PiBib29sZWFuLFxuICAgIGhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZTogKHNlYXJjaFRleHQ6IHN0cmluZykgPT4gdm9pZFxuICApID0+IHtcbiAgICBjb25zdCBTZWFyY2hDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuXG4gICAgY2xhc3MgU2VhcmNoUHJvdmlkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gICAgICBTZWFyY2hQcm92aWRlclByb3BzLFxuICAgICAgU2VhcmNoUHJvdmlkZXJTdGF0ZVxuICAgID4ge1xuICAgICAgY29uc3RydWN0b3IocHJvcHM6IFNlYXJjaFByb3ZpZGVyUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICBsZXQgaW5pdGlhbERhdGEgPSBwcm9wcy5kYXRhO1xuICAgICAgICBpZiAoaXNSZW1vdGVTZWFyY2goKSAmJiB0aGlzLnByb3BzLnNlYXJjaFRleHQgIT09IFwiXCIpIHtcbiAgICAgICAgICBoYW5kbGVSZW1vdGVTZWFyY2hDaGFuZ2UodGhpcy5wcm9wcy5zZWFyY2hUZXh0ISk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5pdGlhbERhdGEgPSB0aGlzLnNlYXJjaChwcm9wcyk7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyTGlzdGVuZXIoaW5pdGlhbERhdGEsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IGRhdGE6IGluaXRpYWxEYXRhIH07XG4gICAgICB9XG5cbiAgICAgIGdldFNlYXJjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5kYXRhO1xuICAgICAgfVxuXG4gICAgICB0cmlnZ2VyTGlzdGVuZXIocmVzdWx0OiBhbnksIHNraXBJbml0PzogYW55KSB7XG4gICAgICAgIGlmIChvcHRpb25zLmFmdGVyU2VhcmNoICYmICFza2lwSW5pdCkge1xuICAgICAgICAgIG9wdGlvbnMuYWZ0ZXJTZWFyY2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kYXRhQ2hhbmdlTGlzdGVuZXIpIHtcbiAgICAgICAgICB0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lci5lbWl0KFwiZmlsdGVyQ2hhbmdlZFwiLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBTZWFyY2hQcm92aWRlclByb3BzKSB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMuc2VhcmNoVGV4dCAhPT0gdGhpcy5wcm9wcy5zZWFyY2hUZXh0KSB7XG4gICAgICAgICAgaWYgKGlzUmVtb3RlU2VhcmNoKCkpIHtcbiAgICAgICAgICAgIGhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSh0aGlzLnByb3BzLnNlYXJjaFRleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNlYXJjaCh0aGlzLnByb3BzKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxpc3RlbmVyKHJlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpc1JlbW90ZVNlYXJjaCgpKSB7XG4gICAgICAgICAgICBpZiAoIV8uaXNFcXVhbCh0aGlzLnN0YXRlLmRhdGEsIHRoaXMucHJvcHMuZGF0YSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGRhdGE6IHRoaXMucHJvcHMuZGF0YSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFfLmlzRXF1YWwocHJldlByb3BzLmRhdGEsIHRoaXMucHJvcHMuZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoKHRoaXMucHJvcHMpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTGlzdGVuZXIocmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VhcmNoKHByb3BzOiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBjb2x1bW5zIH0gPSBwcm9wcztcbiAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHByb3BzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSwgcmlkeDogYW55KSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgY2lkeCA9IDA7IGNpZHggPCBjb2x1bW5zLmxlbmd0aDsgY2lkeCArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2NpZHhdO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5zZWFyY2hhYmxlID09PSBmYWxzZSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0VmFsdWUgPSBfLmdldChyb3csIGNvbHVtbi5kYXRhRmllbGQpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgb3B0aW9ucy5zZWFyY2hGb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUgPSBjb2x1bW4uZm9ybWF0dGVyKFxuICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlLFxuICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICByaWR4LFxuICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRFeHRyYURhdGFcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZpbHRlclZhbHVlKSB7XG4gICAgICAgICAgICAgIHRhcmdldFZhbHVlID0gY29sdW1uLmZpbHRlclZhbHVlKHRhcmdldFZhbHVlLCByb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMub25Db2x1bW5NYXRjaCkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vbkNvbHVtbk1hdGNoKHtcbiAgICAgICAgICAgICAgICAgIHNlYXJjaFRleHQsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogdGFyZ2V0VmFsdWUsXG4gICAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh0YXJnZXRWYWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGFyZ2V0VmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA9IHRhcmdldFZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VmFsdWUuaW5kZXhPZihzZWFyY2hUZXh0KSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxTZWFyY2hDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IGRhdGE6IHRoaXMuc3RhdGUuZGF0YSB9fT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgIDwvU2VhcmNoQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgUHJvdmlkZXI6IFNlYXJjaFByb3ZpZGVyLFxuICAgICAgQ29uc3VtZXI6IFNlYXJjaENvbnRleHQuQ29uc3VtZXIsXG4gICAgfTtcbiAgfTtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IFRvZ2dsZUxpc3QgZnJvbSAnLi90b2dnbGUtbGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHsgVG9nZ2xlTGlzdCB9O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFRhYmxlVG9vbGtpdFByb3BzLCBUb29sa2l0Q29udGV4dFR5cGUgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IGNyZWF0ZVNlYXJjaENvbnRleHQgZnJvbSBcIi4vc3JjL3NlYXJjaC9jb250ZXh0XCI7XG5pbXBvcnQgc3RhdGVsZXNzRGVjb3JhdG9yIGZyb20gXCIuL3N0YXRlbGVzc09wXCI7XG5cbmNvbnN0IFRvb2xraXRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxUb29sa2l0Q29udGV4dFR5cGU+KHtcbiAgc2VhcmNoUHJvcHM6IHtcbiAgICBzZWFyY2hUZXh0OiBcIlwiLFxuICAgIG9uU2VhcmNoOiAodmFsOiBzdHJpbmcpID0+IHt9LFxuICAgIG9uQ2xlYXI6ICgpID0+IHt9LFxuICB9LFxuICBjc3ZQcm9wczoge1xuICAgIG9uRXhwb3J0OiAoKSA9PiB7fSxcbiAgfSxcbiAgY29sdW1uVG9nZ2xlUHJvcHM6IHtcbiAgICBjb2x1bW5zOiBbXSxcbiAgICB0b2dnbGVzOiBbXSxcbiAgICBvbkNvbHVtblRvZ2dsZTogKGRhdGFGaWVsZDogc3RyaW5nKSA9PiB7fSxcbiAgfSxcbiAgYmFzZVByb3BzOiB7XG4gICAga2V5RmllbGQ6IHVuZGVmaW5lZCxcbiAgICBjb2x1bW5zOiBbXSxcbiAgICBkYXRhOiBbXSxcbiAgICBib290c3RyYXA0OiB1bmRlZmluZWQsXG4gIH0sXG59KTtcblxuY2xhc3MgVG9vbGtpdFByb3ZpZGVyIGV4dGVuZHMgc3RhdGVsZXNzRGVjb3JhdG9yKFJlYWN0LkNvbXBvbmVudCkge1xuICAvLyBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAvLyAgIGtleUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8vICAgZGF0YTogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIC8vICAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIC8vICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIC8vICAgYm9vdHN0cmFwNDogUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgc2VhcmNoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgLy8gICAgIFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgLy8gICAgICAgZGVmYXVsdFNlYXJjaDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLy8gICAgICAgc2VhcmNoRm9ybWF0dGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgIH0pLFxuICAvLyAgIF0pLFxuICAvLyAgIGV4cG9ydENTVjogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gIC8vICAgICBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gIC8vICAgICAgIGZpbGVOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvLyAgICAgICBzZXBhcmF0b3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8vICAgICAgIGlnbm9yZUhlYWRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICAgIGlnbm9yZUZvb3RlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICAgIG5vQXV0b0JPTTogUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICAgIGJsb2JUeXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvLyAgICAgICBleHBvcnRBbGw6IFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgICBvbmx5RXhwb3J0RmlsdGVyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgICBvbmx5RXhwb3J0U2VsZWN0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgIH0pLFxuICAvLyAgIF0pLFxuICAvLyB9O1xuXG4gIC8vIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gIC8vICAgc2VhcmNoOiBmYWxzZSxcbiAgLy8gICBleHBvcnRDU1Y6IGZhbHNlLFxuICAvLyAgIGJvb3RzdHJhcDQ6IGZhbHNlLFxuICAvLyB9O1xuXG4gIF86IGFueTtcbiAgc3RhdGU6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogVGFibGVUb29sa2l0UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgY29sdW1uVG9nZ2xlOiB7fSxcbiAgICAgIHNlYXJjaFRleHQ6XG4gICAgICAgIHR5cGVvZiBwcm9wcy5zZWFyY2ggPT09IFwib2JqZWN0XCJcbiAgICAgICAgICA/IHByb3BzLnNlYXJjaC5kZWZhdWx0U2VhcmNoIHx8IFwiXCJcbiAgICAgICAgICA6IFwiXCIsXG4gICAgfTtcbiAgICB0aGlzLl8gPSBudWxsO1xuICAgIHRoaXMub25DbGVhciA9IHRoaXMub25DbGVhci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25TZWFyY2ggPSB0aGlzLm9uU2VhcmNoLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNvbHVtblRvZ2dsZSA9IHRoaXMub25Db2x1bW5Ub2dnbGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNldERlcGVuZGVuY3lNb2R1bGVzID0gdGhpcy5zZXREZXBlbmRlbmN5TW9kdWxlcy5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKHByb3BzLmNvbHVtblRvZ2dsZSkge1xuICAgICAgaW5pdGlhbFN0YXRlLmNvbHVtblRvZ2dsZSA9IHByb3BzLmNvbHVtbnMucmVkdWNlKFxuICAgICAgICAob2JqOiBhbnksIGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgICAgb2JqW2NvbHVtbi5kYXRhRmllbGRdID0gIWNvbHVtbi5oaWRkZW47XG4gICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSxcbiAgICAgICAge31cbiAgICAgICk7XG4gICAgfVxuICAgIGluaXRpYWxTdGF0ZS5zZWFyY2hUZXh0ID1cbiAgICAgIHR5cGVvZiBwcm9wcy5zZWFyY2ggPT09IFwib2JqZWN0XCIgPyBwcm9wcy5zZWFyY2guZGVmYXVsdFNlYXJjaCB8fCBcIlwiIDogXCJcIjtcbiAgICB0aGlzLnN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wczogVGFibGVUb29sa2l0UHJvcHMsIHN0YXRlOiBhbnkpIHtcbiAgICBjb25zdCBjdXJyQ29sdW1uVG9nZ2xlID0gc3RhdGUuY29sdW1uVG9nZ2xlO1xuICAgIGxldCBwcm9wc0NvbHVtblRvZ2dsZTtcbiAgICBpZiAocHJvcHMuY29sdW1uVG9nZ2xlKSB7XG4gICAgICBwcm9wc0NvbHVtblRvZ2dsZSA9IHByb3BzLmNvbHVtbnMucmVkdWNlKChvYmo6IGFueSwgY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgb2JqW2NvbHVtbi5kYXRhRmllbGRdID0gIWNvbHVtbi5oaWRkZW47XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9LCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BzQ29sdW1uVG9nZ2xlID0ge307XG4gICAgfVxuICAgIGlmIChjdXJyQ29sdW1uVG9nZ2xlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgY3VyckNvbHVtblRvZ2dsZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBwcm9wc0NvbHVtblRvZ2dsZSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2goc2VhcmNoVGV4dDogYW55KSB7XG4gICAgaWYgKHNlYXJjaFRleHQgIT09IHRoaXMuc3RhdGUuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNlYXJjaFRleHQgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DbGVhcigpIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgc2VhcmNoVGV4dDogXCJcIiB9KTtcbiAgfVxuXG4gIG9uQ29sdW1uVG9nZ2xlKGRhdGFGaWVsZDogYW55KSB7XG4gICAgY29uc3QgeyBjb2x1bW5Ub2dnbGUgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29sdW1uVG9nZ2xlW2RhdGFGaWVsZF0gPSAhY29sdW1uVG9nZ2xlW2RhdGFGaWVsZF07XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgY29sdW1uVG9nZ2xlLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyp9IF9cbiAgICogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uZSB0aW1lIHdoZW4gdGFibGUgcmVuZGVyXG4gICAqIHJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy9zcmMvY29udGV4dC9pbmRleC5qcyB3aWxsIGNhbGwgdGhpcyBjYiBmb3IgcGFzc2luZyB0aGUgXyBtb2R1bGVcbiAgICogUGxlYXNlIGNvbnNpZGVyIHRvIGV4dHJhY3QgYSBjb21tb24gbW9kdWxlIHRvIGhhbmRsZSBfIG1vZHVsZS5cbiAgICogdGhpcyBpcyBqdXN0IGEgcXVpY2sgZml4XG4gICAqL1xuICBzZXREZXBlbmRlbmN5TW9kdWxlcyhfOiBhbnkpIHtcbiAgICB0aGlzLl8gPSBfO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGJhc2VQcm9wczogVGFibGVUb29sa2l0UHJvcHMgPSB7XG4gICAgICBrZXlGaWVsZDogdGhpcy5wcm9wcy5rZXlGaWVsZCxcbiAgICAgIGNvbHVtbnM6IHRoaXMucHJvcHMuY29sdW1ucyxcbiAgICAgIGRhdGE6IHRoaXMucHJvcHMuZGF0YSxcbiAgICAgIHNlYXJjaDogdGhpcy5wcm9wcy5zZWFyY2ggPz8gZmFsc2UsXG4gICAgICBleHBvcnRDU1Y6IHRoaXMucHJvcHMuZXhwb3J0Q1NWID8/IGZhbHNlLFxuICAgICAgYm9vdHN0cmFwNDogdGhpcy5wcm9wcy5ib290c3RyYXA0ID8/IGZhbHNlLFxuICAgICAgY2hpbGRyZW46IHRoaXMucHJvcHMuY2hpbGRyZW4sXG4gICAgICBzZXREZXBlbmRlbmN5TW9kdWxlczogdGhpcy5zZXREZXBlbmRlbmN5TW9kdWxlcyxcbiAgICAgIHJlZ2lzdGVyRXhwb3NlZEFQSTogdGhpcy5yZWdpc3RlckV4cG9zZWRBUEksXG4gICAgfTtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWFyY2gpIHtcbiAgICAgIGJhc2VQcm9wcy5zZWFyY2ggPSB7XG4gICAgICAgIHNlYXJjaENvbnRleHQ6IGNyZWF0ZVNlYXJjaENvbnRleHQodGhpcy5wcm9wcy5zZWFyY2gpLFxuICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLnN0YXRlLnNlYXJjaFRleHQsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5Ub2dnbGUpIHtcbiAgICAgIGJhc2VQcm9wcy5jb2x1bW5Ub2dnbGUgPSB7XG4gICAgICAgIHRvZ2dsZXM6IHRoaXMuc3RhdGUuY29sdW1uVG9nZ2xlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb29sa2l0Q29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgIHNlYXJjaFByb3BzOiB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLnN0YXRlLnNlYXJjaFRleHQsXG4gICAgICAgICAgICBvblNlYXJjaDogdGhpcy5vblNlYXJjaCxcbiAgICAgICAgICAgIG9uQ2xlYXI6IHRoaXMub25DbGVhcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNzdlByb3BzOiB7XG4gICAgICAgICAgICBvbkV4cG9ydDogdGhpcy5oYW5kbGVFeHBvcnRDU1YsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2x1bW5Ub2dnbGVQcm9wczoge1xuICAgICAgICAgICAgY29sdW1uczogdGhpcy5wcm9wcy5jb2x1bW5zLFxuICAgICAgICAgICAgdG9nZ2xlczogdGhpcy5zdGF0ZS5jb2x1bW5Ub2dnbGUsXG4gICAgICAgICAgICBvbkNvbHVtblRvZ2dsZTogdGhpcy5vbkNvbHVtblRvZ2dsZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJhc2VQcm9wcyxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L1Rvb2xraXRDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBQcm92aWRlcjogVG9vbGtpdFByb3ZpZGVyLFxuICBDb25zdW1lcjogVG9vbGtpdENvbnRleHQuQ29uc3VtZXIsXG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ29sdW1uRGVzY3JpcHRpb24sIFNlYXJjaFByb3BzIH0gZnJvbSBcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZ1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgVG9vbGtpdFByb3ZpZGVyIGZyb20gXCIuL3Byb3ZpZGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFRvb2xraXRQcm92aWRlcjtcbmV4cG9ydCBjb25zdCBUb29sa2l0Q29udGV4dCA9IENvbnRleHQ7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sdW1uVG9nZ2xlIH0gZnJvbSBcIi4vc3JjL2NvbHVtbi10b2dnbGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NWRXhwb3J0IH0gZnJvbSBcIi4vc3JjL2NzdlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWFyY2ggfSBmcm9tIFwiLi9zcmMvc2VhcmNoXCI7XG5cbi8qKlxuICogZGVjbGFyYXRpb24gZm9yIHRhYmxlIHRvb2xraXQgc3ViIG1vZHVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluamVjdGVkU2VhcmNoUHJvcHMge1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIG9uU2VhcmNoOiAodmFsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQ2xlYXI6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoTWF0Y2hQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbjxUPjtcbiAgcm93OiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlU2VhcmNoUHJvcHM8VCBleHRlbmRzIG9iamVjdCA9IGFueT4ge1xuICBzZWFyY2hGb3JtYXR0ZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0U2VhcmNoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgb25Db2x1bW5NYXRjaD86IChwcm9wczogU2VhcmNoTWF0Y2hQcm9wczxUPikgPT4gYm9vbGVhbjtcbiAgY3VzdG9tTWF0Y2hGdW5jPzogKChwcm9wczogU2VhcmNoTWF0Y2hQcm9wczxUPikgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQ7XG4gIGFmdGVyU2VhcmNoPzogKG5ld1Jlc3VsdDogVFtdKSA9PiB2b2lkIHwgdW5kZWZpbmVkO1xuICBzZWFyY2hDb250ZXh0PzogRnVuY3Rpb247XG4gIHNlYXJjaFRleHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NWUHJvcHMge1xuICBmaWxlTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc2VwYXJhdG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZ25vcmVIZWFkZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpZ25vcmVGb290ZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBub0F1dG9CT00/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogZGVmYXVsdCBpcyB0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLThcbiAgICovXG4gIGJsb2JUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBleHBvcnRBbGw/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBvbmx5RXhwb3J0U2VsZWN0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgb25seUV4cG9ydEZpbHRlcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZVRvb2xraXRQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzZWFyY2g/OiBUYWJsZVNlYXJjaFByb3BzPFQ+IHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAga2V5RmllbGQ6IGtleW9mIFQgfCBzdHJpbmc7XG4gIGRhdGE6IFRbXTtcbiAgcmVmPzogYW55O1xuICBjb2x1bW5zOiBBcnJheTxDb2x1bW5EZXNjcmlwdGlvbjxUPj47XG4gIGNoaWxkcmVuOiAocHJvcHM6IFRvb2xraXRDb250ZXh0VHlwZSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50O1xuICBleHBvcnRDU1Y/OiBib29sZWFuIHwgQ1NWUHJvcHMgfCB1bmRlZmluZWQ7XG4gIGNvbHVtblRvZ2dsZT86IHsgW2RhdGFGaWVsZDogc3RyaW5nXTogYm9vbGVhbiB9IHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc2V0RGVwZW5kZW5jeU1vZHVsZXM/OiBGdW5jdGlvbjtcbiAgcmVnaXN0ZXJFeHBvc2VkQVBJPzogRnVuY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbGtpdENvbnRleHRUeXBlIHtcbiAgc2VhcmNoUHJvcHM6IEluamVjdGVkU2VhcmNoUHJvcHM7XG4gIGNzdlByb3BzOiB7XG4gICAgb25FeHBvcnQ6IChzb3VyY2U/OiBhbnkpID0+IHZvaWQ7XG4gIH07XG4gIGNvbHVtblRvZ2dsZVByb3BzOiB7XG4gICAgY29sdW1uczogQ29sdW1uRGVzY3JpcHRpb25bXTtcbiAgICAvKipcbiAgICAgKiBhcnJheSBvZiB0b2dnbGVkIGNvbHVtbnNcbiAgICAgKi9cbiAgICB0b2dnbGVzOiBib29sZWFuW107XG4gICAgb25Db2x1bW5Ub2dnbGU6IChkYXRhRmllbGQ6IHN0cmluZykgPT4gdm9pZDtcbiAgfTtcbiAgYmFzZVByb3BzOiB7XG4gICAgLyoqXG4gICAgICogdGFibGUga2V5IGZpZWxkXG4gICAgICovXG4gICAga2V5RmllbGQ6IGFueTtcbiAgICBjb2x1bW5zOiBDb2x1bW5EZXNjcmlwdGlvbltdO1xuICAgIGRhdGE6IGFueVtdO1xuICAgIGJvb3RzdHJhcDQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvZ2dsZUxpc3RQcm9wcyB7XG4gIGNvbHVtbnM6IENvbHVtbkRlc2NyaXB0aW9uW107XG4gIC8qKlxuICAgKiBhcnJheSBvZiB0b2dnbGVkIGNvbHVtbnNcbiAgICovXG4gIHRvZ2dsZXM6IGJvb2xlYW5bXTtcbiAgb25Db2x1bW5Ub2dnbGU6IChkYXRhRmllbGQ6IHN0cmluZykgPT4gdm9pZDtcbiAgYnRuQ2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnRleHR1YWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0Q1NWQnV0dG9uUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBvbkV4cG9ydDogKCkgPT4gdm9pZDtcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBjbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoQmFyUHJvcHM8VCA9IGFueT4gZXh0ZW5kcyBTZWFyY2hQcm9wczxUPiB7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBkZWxheT86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgc2VhcmNoVGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdGFibGVJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVmPzogUmVhY3QuUmVmT2JqZWN0PFJlYWN0LkNvbXBvbmVudDxTZWFyY2hQcm9wczxUPj4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsZWFyU2VhcmNoQnV0dG9uUHJvcHMge1xuICBvbkNsZWFyPzogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBjbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYmlnaW50OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGVsZW1lbnRUeXBlOiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW0sXG5cbiAgICBjaGVja1Byb3BUeXBlczogZW1wdHlGdW5jdGlvbldpdGhSZXNldCxcbiAgICByZXNldFdhcm5pbmdDYWNoZTogZW1wdHlGdW5jdGlvblxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgaGFuZGxlRGVib3VuY2UgPSA8VCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD4oXG4gIGZ1bmM6IFQsXG4gIHdhaXQ6IG51bWJlcixcbiAgaW1tZWRpYXRlPzogYm9vbGVhblxuKSA9PiB7XG4gIGxldCB0aW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcblxuICByZXR1cm4gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pID0+IHtcbiAgICBjb25zdCBsYXRlciA9ICgpID0+IHtcbiAgICAgIHRpbWVvdXQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG5cbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG5cbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCB8fCAwKTtcblxuICAgIGlmIChjYWxsTm93KSB7XG4gICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfTtcbn07XG5cbmludGVyZmFjZSBTZWFyY2hCYXJTdGF0ZSB7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmNsYXNzIFNlYXJjaEJhciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxTZWFyY2hCYXJQcm9wcywgU2VhcmNoQmFyU3RhdGU+IHtcbiAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU2VhcmNoQmFyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBwcm9wcy5zZWFyY2hUZXh0ID8/IFwiXCIsXG4gICAgfTtcbiAgfVxuXG4gIG9uQ2hhbmdlVmFsdWUgPSAoZTogYW55KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBlLnRhcmdldC52YWx1ZSB9KTtcbiAgfTtcblxuICBvbktleXVwID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZGVsYXkgPSAyNTAsIG9uU2VhcmNoIH0gPSB0aGlzLnByb3BzIGFzIGFueTtcbiAgICBjb25zdCBkZWJvdW5jZUNhbGxiYWNrID0gaGFuZGxlRGVib3VuY2UoKCkgPT4ge1xuICAgICAgb25TZWFyY2ghKHRoaXMuaW5wdXQ/LnZhbHVlID8/IFwiXCIpO1xuICAgIH0sIGRlbGF5KTtcbiAgICBkZWJvdW5jZUNhbGxiYWNrKCk7XG4gIH07XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogU2VhcmNoQmFyUHJvcHMpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWFyY2hUZXh0ICE9PSBwcmV2UHJvcHMuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnByb3BzLnNlYXJjaFRleHQgfHwgXCJcIiB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIHN0eWxlID0ge30sXG4gICAgICBwbGFjZWhvbGRlciA9IFwiU2VhcmNoXCIsXG4gICAgICB0YWJsZUlkID0gXCIwXCIsXG4gICAgICBzZWFyY2hUZXh0ID0gXCJTZWFyY2ggdGhpcyB0YWJsZVwiLFxuICAgIH0gPSB0aGlzLnByb3BzIGFzIGFueTtcblxuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwgaHRtbEZvcj17YHNlYXJjaC1iYXItJHt0YWJsZUlkfWB9IGNsYXNzTmFtZT1cInNlYXJjaC1sYWJlbFwiPlxuICAgICAgICA8c3BhbiBpZD17YHNlYXJjaC1iYXItJHt0YWJsZUlkfS1sYWJlbGB9IGNsYXNzTmFtZT1cInNyLW9ubHlcIj5cbiAgICAgICAgICB7c2VhcmNoVGV4dH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9eyhuKSA9PiB7IHRoaXMuaW5wdXQgPSBuOyB9fVxuICAgICAgICAgIGlkPXtgc2VhcmNoLWJhci0ke3RhYmxlSWR9YH1cbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgc3R5bGU9e3N0eWxlIGFzIGFueX1cbiAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2BzZWFyY2gtYmFyLSR7dGFibGVJZH0tbGFiZWxgfVxuICAgICAgICAgIG9uS2V5VXA9eygpID0+IHRoaXMub25LZXl1cCgpfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlVmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtgZm9ybS1jb250cm9sICR7Y2xhc3NOYW1lfWB9XG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAvPlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG59XG5cbi8vIFNlYXJjaEJhci5wcm9wVHlwZXMgPSB7XG4vLyAgIG9uU2VhcmNoOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuLy8gICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuLy8gICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4vLyAgIHNlYXJjaFRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHRhYmxlSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHNyVGV4dDogUHJvcFR5cGVzLnN0cmluZ1xuLy8gfTtcblxuLy8gU2VhcmNoQmFyLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgY2xhc3NOYW1lOiAnJyxcbi8vICAgc3R5bGU6IHt9LFxuLy8gICBwbGFjZWhvbGRlcjogJ1NlYXJjaCcsXG4vLyAgIGRlbGF5OiAyNTAsXG4vLyAgIHNlYXJjaFRleHQ6ICcnLFxuLy8gICB0YWJsZUlkOiAnMCcsXG4vLyAgIHNyVGV4dDogJ1NlYXJjaCB0aGlzIHRhYmxlJ1xuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgU2VhcmNoQmFyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCIuL3NyYy9vcFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoQmFzZTogYW55KSA9PlxuICBjbGFzcyBTdGF0ZWxlc3NPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb24uY3N2T3BlcmF0aW9uKEJhc2UpIHtcbiAgICByZWdpc3RlckV4cG9zZWRBUEkgPSAodGFibGVFeHBvc2VkQVBJRW1pdHRlcjogYW55KSA9PiB7XG4gICAgICB0aGlzLnRhYmxlRXhwb3NlZEFQSUVtaXR0ZXIgPSB0YWJsZUV4cG9zZWRBUElFbWl0dGVyO1xuICAgIH07XG4gIH07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IGdldE1ldGFJbmZvLCBzYXZlLCB0cmFuc2Zvcm0gfSBmcm9tIFwiLi4vY3N2L2V4cG9ydGVyXCI7XG5cbmNvbnN0IGNzdkRlZmF1bHRPcHRpb25zID0ge1xuICBmaWxlTmFtZTogXCJzcHJlYWRzaGVldC5jc3ZcIixcbiAgc2VwYXJhdG9yOiBcIixcIixcbiAgaWdub3JlSGVhZGVyOiBmYWxzZSxcbiAgaWdub3JlRm9vdGVyOiB0cnVlLFxuICBub0F1dG9CT006IHRydWUsXG4gIGJsb2JUeXBlOiBcInRleHQvcGxhaW47Y2hhcnNldD11dGYtOFwiLFxuICBleHBvcnRBbGw6IHRydWUsXG4gIG9ubHlFeHBvcnRTZWxlY3Rpb246IGZhbHNlLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgKEJhc2U6IGFueSkgPT5cbiAgY2xhc3MgQ1NWT3BlcmF0aW9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHR5cGVvZiBCYXNlPiB7XG4gICAgXzogYW55O1xuICAgIHRhYmxlRXhwb3NlZEFQSUVtaXR0ZXI6IGFueTtcblxuICAgIGhhbmRsZUV4cG9ydENTViA9IChzb3VyY2U6IGFueSkgPT4ge1xuICAgICAgY29uc3QgeyBjb2x1bW5zLCBleHBvcnRDU1YsIGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbWV0YSA9IGdldE1ldGFJbmZvKGNvbHVtbnMpO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9XG4gICAgICAgIGV4cG9ydENTViA9PT0gdHJ1ZVxuICAgICAgICAgID8gY3N2RGVmYXVsdE9wdGlvbnNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgLi4uY3N2RGVmYXVsdE9wdGlvbnMsXG4gICAgICAgICAgICAgIC4uLmV4cG9ydENTVixcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIGdldCBkYXRhIGZvciBjc3YgZXhwb3J0XG4gICAgICBsZXQgZGF0YTogYW55O1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgZGF0YSA9IHNvdXJjZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5leHBvcnRBbGwpIHtcbiAgICAgICAgZGF0YSA9IHRoaXMucHJvcHMuZGF0YTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5vbmx5RXhwb3J0RmlsdGVyZWQpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogeyByZXN1bHQ6IGFueSB9ID0geyByZXN1bHQ6IHVuZGVmaW5lZCB9O1xuICAgICAgICB0aGlzLnRhYmxlRXhwb3NlZEFQSUVtaXR0ZXIuZW1pdChcImdldC5maWx0ZXJlZC5yb3dzXCIsIHBheWxvYWQpO1xuICAgICAgICBkYXRhID0gcGF5bG9hZC5yZXN1bHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0geyByZXN1bHQ6IHVuZGVmaW5lZCB9O1xuICAgICAgICB0aGlzLnRhYmxlRXhwb3NlZEFQSUVtaXR0ZXIuZW1pdChcImdldC50YWJsZS5kYXRhXCIsIHBheWxvYWQpO1xuICAgICAgICBkYXRhID0gcGF5bG9hZC5yZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIGZpbHRlciBkYXRhIGJ5IHJvdyBzZWxlY3Rpb25cbiAgICAgIGlmIChvcHRpb25zLm9ubHlFeHBvcnRTZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHsgcmVzdWx0OiB1bmRlZmluZWQgfTtcbiAgICAgICAgdGhpcy50YWJsZUV4cG9zZWRBUElFbWl0dGVyLmVtaXQoXCJnZXQuc2VsZWN0ZWQucm93c1wiLCBwYXlsb2FkKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9ucyA9IHBheWxvYWQucmVzdWx0ID8/IFtdO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcigocm93OiBhbnkpID0+IHNlbGVjdGlvbnMuaW5jbHVkZXMocm93W2tleUZpZWxkXSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gdHJhbnNmb3JtKGRhdGEsIG1ldGEsIGNvbHVtbnMsIHRoaXMuXywgb3B0aW9ucyk7XG4gICAgICBzYXZlKGNvbnRlbnQsIG9wdGlvbnMpO1xuICAgIH07XG4gIH07XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFRhYmxlVG9vbGtpdFByb3BzIH0gZnJvbSBcIi5cIjtcbmltcG9ydCBUb29sa2l0Q29udGV4dCBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmNvbnN0IFRvb2xraXRwcm92aWRlciA9IChcbiAgcHJvcHM6IFRhYmxlVG9vbGtpdFByb3BzXG4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsID0+IChcbiAgPFRvb2xraXRDb250ZXh0LlByb3ZpZGVyIHsuLi5wcm9wc30+XG4gICAgPFRvb2xraXRDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyh0b29rS2l0UHJvcHMpID0+IHByb3BzLmNoaWxkcmVuKHRvb2tLaXRQcm9wcyl9XG4gICAgPC9Ub29sa2l0Q29udGV4dC5Db25zdW1lcj5cbiAgPC9Ub29sa2l0Q29udGV4dC5Qcm92aWRlcj5cbik7XG5cblRvb2xraXRwcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgVG9vbGtpdHByb3ZpZGVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjg4KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fIiwiZXhwb3J0Q1NWQnV0dG9uRGVmYXVsdFByb3BzIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJFeHBvcnRDU1ZCdXR0b24iLCJwcm9wcyIsIm9uRXhwb3J0IiwiY2hpbGRyZW4iLCJyZXN0IiwidHlwZSIsIm9uQ2xpY2siLCJwcm9wVHlwZXMiLCJub2RlIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJzdHJpbmciLCJvYmplY3QiLCJDbGVhckJ1dHRvbiIsIm9uQ2xlYXIiLCJ0ZXh0IiwiVG9nZ2xlTGlzdCIsImNvbHVtbnMiLCJvbkNvbHVtblRvZ2dsZSIsInRvZ2dsZXMiLCJidG5DbGFzc05hbWUiLCJjb250ZXh0dWFsIiwibWFwIiwiY29sdW1uIiwidG9nZ2xlIiwiZGF0YUZpZWxkIiwia2V5IiwiYXJyYXkiLCJiIiwiYSIsImF1dG9Cb20iLCJjb25zb2xlIiwid2FybiIsInRlc3QiLCJCbG9iIiwiYyIsImQiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJyZXNwb25zZVR5cGUiLCJvbmxvYWQiLCJnIiwicmVzcG9uc2UiLCJvbmVycm9yIiwiZXJyb3IiLCJzZW5kIiwic3RhdHVzIiwiZSIsImRpc3BhdGNoRXZlbnQiLCJNb3VzZUV2ZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFdmVudCIsImluaXRNb3VzZUV2ZW50Iiwid2luZG93IiwiZiIsImdsb2JhbCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInNhdmVBcyIsIkhUTUxBbmNob3JFbGVtZW50IiwicHJvdG90eXBlIiwiaCIsImkiLCJVUkwiLCJ3ZWJraXRVUkwiLCJqIiwiY3JlYXRlRWxlbWVudCIsIm5hbWUiLCJkb3dubG9hZCIsInJlbCIsImhyZWYiLCJvcmlnaW4iLCJsb2NhdGlvbiIsInRhcmdldCIsImNyZWF0ZU9iamVjdFVSTCIsInNldFRpbWVvdXQiLCJyZXZva2VPYmplY3RVUkwiLCJtc1NhdmVPck9wZW5CbG9iIiwidGl0bGUiLCJib2R5IiwiaW5uZXJUZXh0IiwiSFRNTEVsZW1lbnQiLCJzYWZhcmkiLCJGaWxlUmVhZGVyIiwiayIsIm9ubG9hZGVuZCIsInJlc3VsdCIsInJlcGxhY2UiLCJyZWFkQXNEYXRhVVJMIiwibCIsIm0iLCJnZXRNZXRhSW5mbyIsImZpZWxkIiwiY3N2VHlwZSIsIlN0cmluZyIsImZvcm1hdHRlciIsImNzdkZvcm1hdHRlciIsImZvcm1hdEV4dHJhRGF0YSIsImhlYWRlciIsImNzdlRleHQiLCJleHBvcnQiLCJjc3ZFeHBvcnQiLCJyb3ciLCJOdW1iZXIiLCJyb3dTcGFuIiwiY29sU3BhbiIsImZvb3RlciIsImZvb3RlckZvcm1hdHRlciIsImZpbHRlciIsIl8iLCJ0cmFuc2Zvcm0iLCJkYXRhIiwibWV0YSIsInNlcGFyYXRvciIsImlnbm9yZUhlYWRlciIsImlnbm9yZUZvb3RlciIsInZpc2libGVDb2x1bW5zIiwiY29udGVudCIsImpvaW4iLCJsZW5ndGgiLCJyb3dJbmRleCIsImNlbGxDb250ZW50IiwiZ2V0IiwiY29sdW1uRGF0YSIsInBsdWNrIiwic2F2ZSIsIm5vQXV0b0JPTSIsImZpbGVOYW1lIiwiYmxvYlR5cGUiLCJjc3ZPcGVyYXRpb24iLCJTZWFyY2hCYXIiLCJDbGVhclNlYXJjaEJ1dHRvbiIsIm9wdGlvbnMiLCJzZWFyY2hGb3JtYXR0ZWQiLCJhZnRlclNlYXJjaCIsInVuZGVmaW5lZCIsIm9uQ29sdW1uTWF0Y2giLCJpc1JlbW90ZVNlYXJjaCIsImhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSIsIlNlYXJjaENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiU2VhcmNoUHJvdmlkZXIiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInN1cGVyIiwiaW5pdGlhbERhdGEiLCJ0aGlzIiwic2VhcmNoVGV4dCIsInNlYXJjaCIsInRyaWdnZXJMaXN0ZW5lciIsInN0YXRlIiwiZ2V0U2VhcmNoZWQiLCJza2lwSW5pdCIsImRhdGFDaGFuZ2VMaXN0ZW5lciIsImVtaXQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJzZXRTdGF0ZSIsImlzRXF1YWwiLCJ0b0xvd2VyQ2FzZSIsInJpZHgiLCJjaWR4Iiwic2VhcmNoYWJsZSIsInRhcmdldFZhbHVlIiwiZmlsdGVyVmFsdWUiLCJ2YWx1ZSIsInRvU3RyaW5nIiwiaW5kZXhPZiIsInJlbmRlciIsIlByb3ZpZGVyIiwiQ29uc3VtZXIiLCJUb29sa2l0Q29udGV4dCIsInNlYXJjaFByb3BzIiwib25TZWFyY2giLCJ2YWwiLCJjc3ZQcm9wcyIsImNvbHVtblRvZ2dsZVByb3BzIiwiYmFzZVByb3BzIiwia2V5RmllbGQiLCJib290c3RyYXA0IiwiVG9vbGtpdFByb3ZpZGVyIiwiaW5pdGlhbFN0YXRlIiwiY29sdW1uVG9nZ2xlIiwiZGVmYXVsdFNlYXJjaCIsImJpbmQiLCJzZXREZXBlbmRlbmN5TW9kdWxlcyIsInJlZHVjZSIsIm9iaiIsImhpZGRlbiIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsImN1cnJDb2x1bW5Ub2dnbGUiLCJwcm9wc0NvbHVtblRvZ2dsZSIsImV4cG9ydENTViIsInJlZ2lzdGVyRXhwb3NlZEFQSSIsInNlYXJjaENvbnRleHQiLCJoYW5kbGVFeHBvcnRDU1YiLCJkZWZhdWx0IiwiUmVhY3RQcm9wVHlwZXNTZWNyZXQiLCJlbXB0eUZ1bmN0aW9uIiwiZW1wdHlGdW5jdGlvbldpdGhSZXNldCIsInJlc2V0V2FybmluZ0NhY2hlIiwic2hpbSIsInByb3BOYW1lIiwiY29tcG9uZW50TmFtZSIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImVyciIsIkVycm9yIiwiZ2V0U2hpbSIsIlJlYWN0UHJvcFR5cGVzIiwiYmlnaW50IiwiYm9vbCIsIm51bWJlciIsInN5bWJvbCIsImFueSIsImFycmF5T2YiLCJlbGVtZW50IiwiZWxlbWVudFR5cGUiLCJpbnN0YW5jZU9mIiwib2JqZWN0T2YiLCJvbmVPZiIsIm9uZU9mVHlwZSIsInNoYXBlIiwiZXhhY3QiLCJjaGVja1Byb3BUeXBlcyIsIlByb3BUeXBlcyIsImhhbmRsZURlYm91bmNlIiwid2FpdCIsImltbWVkaWF0ZSIsInRpbWVvdXQiLCJhcmdzIiwiY2FsbE5vdyIsImNsZWFyVGltZW91dCIsImFwcGx5IiwiaW5wdXQiLCJvbkNoYW5nZVZhbHVlIiwib25LZXl1cCIsImRlbGF5IiwiZGVib3VuY2VDYWxsYmFjayIsInBsYWNlaG9sZGVyIiwidGFibGVJZCIsImh0bWxGb3IiLCJpZCIsInJlZiIsIm4iLCJvbktleVVwIiwib25DaGFuZ2UiLCJCYXNlIiwidGFibGVFeHBvc2VkQVBJRW1pdHRlciIsImNzdkRlZmF1bHRPcHRpb25zIiwiZXhwb3J0QWxsIiwib25seUV4cG9ydFNlbGVjdGlvbiIsInNvdXJjZSIsIm9ubHlFeHBvcnRGaWx0ZXJlZCIsInBheWxvYWQiLCJzZWxlY3Rpb25zIiwiaW5jbHVkZXMiLCJUb29sa2l0cHJvdmlkZXIiLCJ0b29rS2l0UHJvcHMiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiY2FsbCIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrapTableNgToolkit=t(require("react")):e.ReactBootstrapTableNgToolkit=t(e.React)}(self,e=>(()=>{var t={40(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442)),s={className:"",style:{}};t.default=e=>{const{onExport:t,children:o,className:r,...n}={...s,...e};return a.default.createElement("button",{type:"button",className:`react-bs-table-csv-btn btn btn-default ${r}`,onClick:()=>t(),...n},o)}},68(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442));t.default=({onClear:e,text:t="Clear",className:o=""})=>a.default.createElement("button",{className:`btn btn-default ${o}`,onClick:e},t)},140(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442));t.default=({columns:e,onColumnToggle:t,toggles:o,btnClassName:r="",className:s="",contextual:n="primary"})=>a.default.createElement("div",{className:`btn-group btn-group-toggle ${s}`,"data-toggle":"buttons"},e.map(e=>({...e,toggle:o[e.dataField]})).map(e=>a.default.createElement("button",{type:"button",key:e.dataField,className:`${r} btn btn-${n} ${e.toggle?"active":""}`,"data-toggle":"button","aria-pressed":e.toggle?"true":"false",onClick:()=>t(e.dataField)},e.text)))},213(e,t,o){var r,a,s;a=[],void 0===(s="function"==typeof(r=function(){"use strict";function t(e,t){return void 0===t?t={autoBom:!1}:"object"!=typeof t&&(console.warn("Deprecated: Expected third argument to be a object"),t={autoBom:!t}),t.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\ufeff",e],{type:e.type}):e}function r(e,t,o){var r=new XMLHttpRequest;r.open("GET",e),r.responseType="blob",r.onload=function(){i(r.response,t,o)},r.onerror=function(){console.error("could not download file")},r.send()}function a(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function s(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(o){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var n="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof o.g&&o.g.global===o.g?o.g:void 0,l=n.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),i=n.saveAs||("object"!=typeof window||window!==n?function(){}:"download"in HTMLAnchorElement.prototype&&!l?function(e,t,o){var l=n.URL||n.webkitURL,i=document.createElement("a");t=t||e.name||"download",i.download=t,i.rel="noopener","string"==typeof e?(i.href=e,i.origin===location.origin?s(i):a(i.href)?r(e,t,o):s(i,i.target="_blank")):(i.href=l.createObjectURL(e),setTimeout(function(){l.revokeObjectURL(i.href)},4e4),setTimeout(function(){s(i)},0))}:"msSaveOrOpenBlob"in navigator?function(e,o,n){if(o=o||e.name||"download","string"!=typeof e)navigator.msSaveOrOpenBlob(t(e,n),o);else if(a(e))r(e,o,n);else{var l=document.createElement("a");l.href=e,l.target="_blank",setTimeout(function(){s(l)})}}:function(e,t,o,a){if((a=a||open("","_blank"))&&(a.document.title=a.document.body.innerText="downloading..."),"string"==typeof e)return r(e,t,o);var s="application/octet-stream"===e.type,i=/constructor/i.test(n.HTMLElement)||n.safari,u=/CriOS\/[\d]+/.test(navigator.userAgent);if((u||s&&i||l)&&"undefined"!=typeof FileReader){var c=new FileReader;c.onloadend=function(){var e=c.result;e=u?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=e:location=e,a=null},c.readAsDataURL(e)}else{var d=n.URL||n.webkitURL,p=d.createObjectURL(e);a?a.location=p:location.href=p,a=null,setTimeout(function(){d.revokeObjectURL(p)},4e4)}});n.saveAs=i.saveAs=i,e.exports=i})?r.apply(t,a):r)||(e.exports=s)},282(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(40));t.default={ExportCSVButton:a.default}},442(t){"use strict";t.exports=e},457(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.save=t.transform=t.getMetaInfo=void 0;const a=r(o(213));t.getMetaInfo=e=>e.map(e=>({field:e.dataField,type:e.csvType||String,formatter:e.csvFormatter,formatExtraData:e.formatExtraData,header:e.csvText||e.text,export:!1!==e.csvExport,row:Number(e.row)||0,rowSpan:Number(e.rowSpan)||1,colSpan:Number(e.colSpan)||1,footer:e.footer,footerFormatter:e.footerFormatter})).filter(e=>e.export);t.transform=(e,t,o,r,{separator:a,ignoreHeader:s,ignoreFooter:n})=>{const l=t.filter(e=>e.export);let i="";return s||(i+=l.map(e=>`"${e.header}"`).join(a),i+="\n"),0===e.length||(i+=e.map((e,t)=>l.map(o=>{let a=r.get(e,o.field);return o.formatter&&(a=o.formatter(a,e,t,o.formatExtraData)),o.type===String?`"${`${a}`.replace(/"/g,'""')}"`:a}).join(a)).join("\n"),n||(i+="\n",i+=l.map((t,a)=>{if("function"==typeof t.footer){const s=r.pluck(e,o[a].dataField);return`"${t.footer(s,o[a],a)}"`}return t.footerFormatter?`"${t.footerFormatter(o[a],a)}"`:`"${t.footer}"`}).join(a))),i};t.save=(e,{noAutoBOM:t,fileName:o,blobType:r})=>{a.default.saveAs(new Blob([e],{type:r}),o,t)}},469(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(881));t.default={csvOperation:a.default}},470(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(801)),s=r(o(68));t.default={SearchBar:a.default,ClearSearchButton:s.default}},499(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442));t.default=(e={searchFormatted:!1,afterSearch:void 0,onColumnMatch:()=>!1})=>(t,o,r)=>{const s=a.default.createContext(null);class n extends a.default.Component{constructor(e){super(e);let t=e.data;o()&&""!==this.props.searchText?r(this.props.searchText):(t=this.search(e),this.triggerListener(t,!0)),this.state={data:t}}getSearched(){return this.state.data}triggerListener(t,o){e.afterSearch&&!o&&e.afterSearch(t),this.props.dataChangeListener&&this.props.dataChangeListener.emit("filterChanged",t.length)}componentDidUpdate(e){if(e.searchText!==this.props.searchText)if(o())r(this.props.searchText);else{const e=this.search(this.props);this.triggerListener(e),this.setState({data:e})}else if(o())t.isEqual(this.state.data,this.props.data)||this.setState({data:this.props.data});else if(!t.isEqual(e.data,this.props.data)){const e=this.search(this.props);this.triggerListener(e),this.setState({data:e})}}search(o){const{data:r,columns:a}=o,s=o.searchText.toLowerCase();return r.filter((o,r)=>{for(let n=0;n<a.length;n+=1){const l=a[n];if(!1===l.searchable)continue;let i=t.get(o,l.dataField);if(l.formatter&&e.searchFormatted?i=l.formatter(i,o,r,l.formatExtraData):l.filterValue&&(i=l.filterValue(i,o)),e.onColumnMatch){if(e.onColumnMatch({searchText:s,value:i,column:l,row:o}))return!0}else if(null!=i&&(i=i.toString().toLowerCase(),i.indexOf(s)>-1))return!0}return!1})}render(){return a.default.createElement(s.Provider,{value:{data:this.state.data}},this.props.children)}}return{Provider:n,Consumer:s.Consumer}}},555(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(140));t.default={ToggleList:a.default}},633(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442)),s=r(o(499)),n=r(o(880)),l=a.default.createContext({searchProps:{searchText:"",onSearch:e=>{},onClear:()=>{}},csvProps:{onExport:()=>{}},columnToggleProps:{columns:[],toggles:[],onColumnToggle:e=>{}},baseProps:{keyField:void 0,columns:[],data:[],bootstrap4:void 0}});class i extends((0,n.default)(a.default.Component)){static defaultProps={search:!1,exportCSV:!1,bootstrap4:!1};_;state;constructor(e){super(e);const t={columnToggle:{},searchText:"object"==typeof e.search&&e.search.defaultSearch||""};this._=null,this.onClear=this.onClear.bind(this),this.onSearch=this.onSearch.bind(this),this.onColumnToggle=this.onColumnToggle.bind(this),this.setDependencyModules=this.setDependencyModules.bind(this),e.columnToggle&&(t.columnToggle=e.columns.reduce((e,t)=>(e[t.dataField]=!t.hidden,e),{})),t.searchText="object"==typeof e.search&&e.search.defaultSearch||"",this.state=t}static getDerivedStateFromProps(e,t){const o=t.columnToggle;let r;return r=e.columnToggle?e.columns.reduce((e,t)=>(e[t.dataField]=!t.hidden,e),{}):{},o?{...t,currColumnToggle:o}:{...t,propsColumnToggle:r}}onSearch(e){e!==this.state.searchText&&this.setState({searchText:e})}onClear(){this.setState({searchText:""})}onColumnToggle(e){const{columnToggle:t}=this.state;t[e]=!t[e],this.setState({...this.state,columnToggle:t})}setDependencyModules(e){this._=e}render(){const e={keyField:this.props.keyField,columns:this.props.columns,data:this.props.data,search:this.props.search??!1,exportCSV:this.props.exportCSV??!1,bootstrap4:this.props.bootstrap4??!1,children:this.props.children,setDependencyModules:this.setDependencyModules,registerExposedAPI:this.registerExposedAPI};return this.props.search&&(e.search={searchContext:(0,s.default)(this.props.search),searchText:this.state.searchText}),this.props.columnToggle&&(e.columnToggle={toggles:this.state.columnToggle}),a.default.createElement(l.Provider,{value:{searchProps:{searchText:this.state.searchText,onSearch:this.onSearch,onClear:this.onClear},csvProps:{onExport:this.handleExportCSV},columnToggleProps:{columns:this.props.columns,toggles:this.state.columnToggle,onColumnToggle:this.onColumnToggle},baseProps:e}},this.props.children)}}t.default={Provider:i,Consumer:l.Consumer}},688(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Search=t.CSVExport=t.ColumnToggle=t.ToolkitContext=void 0;const a=r(o(633)),s=r(o(921));t.default=s.default,t.ToolkitContext=a.default;var n=o(555);Object.defineProperty(t,"ColumnToggle",{enumerable:!0,get:function(){return r(n).default}});var l=o(282);Object.defineProperty(t,"CSVExport",{enumerable:!0,get:function(){return r(l).default}});var i=o(470);Object.defineProperty(t,"Search",{enumerable:!0,get:function(){return r(i).default}})},801(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442)),s=(e,t,o)=>{let r;return(...a)=>{const s=o&&!r;clearTimeout(r),r=setTimeout(()=>{r=void 0,o||e.apply(this,a)},t||0),s&&e.apply(this,a)}};class n extends a.default.Component{input=null;constructor(e){super(e),this.state={value:e.searchText??""}}onChangeValue=e=>{this.setState({value:e.target.value})};onKeyup=()=>{const{delay:e=250,onSearch:t}=this.props;s(()=>{t(this.input?.value??"")},e)()};componentDidUpdate(e){this.props.searchText!==e.searchText&&this.setState({value:this.props.searchText||""})}render(){const{className:e="",style:t={},placeholder:o="Search",tableId:r="0",searchText:s="Search this table"}=this.props;return a.default.createElement("label",{htmlFor:`search-bar-${r}`,className:"search-label"},a.default.createElement("span",{id:`search-bar-${r}-label`,className:"sr-only"},s),a.default.createElement("input",{ref:e=>{this.input=e},id:`search-bar-${r}`,type:"text",style:t,"aria-labelledby":`search-bar-${r}-label`,onKeyUp:()=>this.onKeyup(),onChange:this.onChangeValue,className:`form-control ${e}`,value:this.state.value,placeholder:o}))}static defaultProps={className:"",style:{},placeholder:"Search",delay:250,searchText:"",tableId:"0",srText:"Search this table"}}t.default=n},880(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(469));t.default=e=>class extends(a.default.csvOperation(e)){registerExposedAPI=e=>{this.tableExposedAPIEmitter=e}}},881(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442)),s=o(457),n={fileName:"spreadsheet.csv",separator:",",ignoreHeader:!1,ignoreFooter:!0,noAutoBOM:!0,blobType:"text/plain;charset=utf-8",exportAll:!0,onlyExportSelection:!1};t.default=e=>class extends a.default.Component{_;tableExposedAPIEmitter;handleExportCSV=e=>{const{columns:t,exportCSV:o,keyField:r}=this.props,a=(0,s.getMetaInfo)(t),l=!0===o?n:{...n,...o};let i;if(void 0!==e)i=e;else if(l.exportAll)i=this.props.data;else if(l.onlyExportFiltered){const e={result:void 0};this.tableExposedAPIEmitter.emit("get.filtered.rows",e),i=e.result}else{const e={result:void 0};this.tableExposedAPIEmitter.emit("get.table.data",e),i=e.result}if(l.onlyExportSelection){const e={result:void 0};this.tableExposedAPIEmitter.emit("get.selected.rows",e);const t=e.result??[];i=i.filter(e=>t.includes(e[r]))}const u=(0,s.transform)(i,a,t,this._,l);(0,s.save)(u,l)}}},921(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(o(442)),s=r(o(633));t.default=e=>a.default.createElement(s.default.Provider,{...e},a.default.createElement(s.default.Consumer,null,t=>e.children(t)))}},o={};function r(e){var a=o[e];if(void 0!==a)return a.exports;var s=o[e]={exports:{}};return t[e].call(s.exports,s,s.exports,r),s.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r(688)})());
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC5taW4uanMiLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsVUFDUixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsU0FBVUosR0FDUSxpQkFBWkMsUUFDZEEsUUFBc0MsNkJBQUlELEVBQVFHLFFBQVEsVUFFMURKLEVBQW1DLDZCQUFJQyxFQUFRRCxFQUFZLE1BQzVELENBVEQsQ0FTR08sS0FBT0MsRyx5S0NUVixrQkFJTUMsRUFBOEIsQ0FDbENDLFVBQVcsR0FDWEMsTUFBTyxDQUFDLEdBc0JWLFVBbEJFQyxJQUVBLE1BQU0sU0FBRUMsRUFBUSxTQUFFQyxFQUFRLFVBQUVKLEtBQWNLLEdBQVMsSUFBS04sS0FBZ0NHLEdBRXhGLE9BQ0Usa0NBQ0VJLEtBQUssU0FDTE4sVUFBVywwQ0FBMENBLElBQ3JETyxRQUFTLElBQU1KLE9BQ1hFLEdBRUhELEcsOEpDckJQLGtCQW9CQSxVQWpCb0IsRUFDbEJJLFVBQ0FDLE9BQU8sUUFDUFQsWUFBWSxNQUVaLGtDQUFRQSxVQUFXLG1CQUFtQkEsSUFBYU8sUUFBU0MsR0FDekRDLEUsK0pDVEwsa0JBOENBLFVBMUNtQixFQUNqQkMsVUFDQUMsaUJBQ0FDLFVBQ0FDLGVBQWUsR0FDZmIsWUFBWSxHQUNaYyxhQUFhLGFBRWIsK0JBQ0VkLFVBQVcsOEJBQThCQSxJQUFXLGNBQ3hDLFdBRVhVLEVBQ0VLLElBQUtDLElBQThCLElBQy9CQSxFQUNIQyxPQUFRTCxFQUFRSSxFQUFPRSxjQUV4QkgsSUFBS0MsR0FDSixrQ0FDRVYsS0FBSyxTQUNMYSxJQUFLSCxFQUFPRSxVQUNabEIsVUFBVyxHQUFHYSxhQUF3QkMsS0FDcENFLEVBQU9DLE9BQVMsU0FBVyxLQUMzQixjQUNVLFNBQVEs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QUFPQSxNQUN4QyxDQUNBLENBUHVCLEdDR0VzTCxFQUFvQixJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY3N2L2J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9jbGVhci1idXR0b24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jb2x1bW4tdG9nZ2xlL3RvZ2dsZS1saXN0LnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmlsZS1zYXZlci9kaXN0L0ZpbGVTYXZlci5taW4uanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2Nzdi9pbmRleC50cyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2Nzdi9leHBvcnRlci50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvb3AvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvc2VhcmNoL2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jb2x1bW4tdG9nZ2xlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L2luZGV4LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9zZWFyY2gvU2VhcmNoQmFyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zdGF0ZWxlc3NPcC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvb3AvY3N2LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3Byb3ZpZGVyLnRzeCIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJyZWFjdFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdUb29sa2l0XCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1Rvb2xraXRcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSk7XG59KShzZWxmLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18pID0+IHtcbnJldHVybiAiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEV4cG9ydENTVkJ1dHRvblByb3BzIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmNvbnN0IGV4cG9ydENTVkJ1dHRvbkRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiBcIlwiLFxuICBzdHlsZToge30sXG59O1xuXG5jb25zdCBFeHBvcnRDU1ZCdXR0b24gPSAoXG4gIHByb3BzOiBFeHBvcnRDU1ZCdXR0b25Qcm9wc1xuKTogUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbCA9PiB7XG4gIGNvbnN0IHsgb25FeHBvcnQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIC4uLnJlc3QgfSA9IHsgLi4uZXhwb3J0Q1NWQnV0dG9uRGVmYXVsdFByb3BzLCAuLi5wcm9wcyB9O1xuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2ByZWFjdC1icy10YWJsZS1jc3YtYnRuIGJ0biBidG4tZGVmYXVsdCAke2NsYXNzTmFtZX1gfVxuICAgICAgb25DbGljaz17KCkgPT4gb25FeHBvcnQoKX1cbiAgICAgIHsuLi5yZXN0fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn07XG5cblxuXG5leHBvcnQgZGVmYXVsdCBFeHBvcnRDU1ZCdXR0b247XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDbGVhclNlYXJjaEJ1dHRvblByb3BzIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmNvbnN0IENsZWFyQnV0dG9uID0gKHtcbiAgb25DbGVhcixcbiAgdGV4dCA9IFwiQ2xlYXJcIixcbiAgY2xhc3NOYW1lID0gXCJcIixcbn06IENsZWFyU2VhcmNoQnV0dG9uUHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsID0+IChcbiAgPGJ1dHRvbiBjbGFzc05hbWU9e2BidG4gYnRuLWRlZmF1bHQgJHtjbGFzc05hbWV9YH0gb25DbGljaz17b25DbGVhcn0+XG4gICAge3RleHR9XG4gIDwvYnV0dG9uPlxuKTtcblxuXG5cbi8vIENsZWFyQnV0dG9uLmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgdGV4dDogXCJDbGVhclwiLFxuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBDbGVhckJ1dHRvbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENvbHVtbkRlc2NyaXB0aW9uIH0gZnJvbSBcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZ1wiO1xuaW1wb3J0IHsgVG9nZ2xlTGlzdFByb3BzIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmNvbnN0IFRvZ2dsZUxpc3QgPSAoe1xuICBjb2x1bW5zLFxuICBvbkNvbHVtblRvZ2dsZSxcbiAgdG9nZ2xlcyxcbiAgYnRuQ2xhc3NOYW1lID0gXCJcIixcbiAgY2xhc3NOYW1lID0gXCJcIixcbiAgY29udGV4dHVhbCA9IFwicHJpbWFyeVwiXG59OiBUb2dnbGVMaXN0UHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT17YGJ0bi1ncm91cCBidG4tZ3JvdXAtdG9nZ2xlICR7Y2xhc3NOYW1lfWB9XG4gICAgZGF0YS10b2dnbGU9XCJidXR0b25zXCJcbiAgPlxuICAgIHtjb2x1bW5zXG4gICAgICAubWFwKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uKSA9PiAoe1xuICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgIHRvZ2dsZTogdG9nZ2xlc1tjb2x1bW4uZGF0YUZpZWxkXSxcbiAgICAgIH0pKVxuICAgICAgLm1hcCgoY29sdW1uOiBDb2x1bW5EZXNjcmlwdGlvbikgPT4gKFxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAga2V5PXtjb2x1bW4uZGF0YUZpZWxkfVxuICAgICAgICAgIGNsYXNzTmFtZT17YCR7YnRuQ2xhc3NOYW1lfSBidG4gYnRuLSR7Y29udGV4dHVhbH0gJHtcbiAgICAgICAgICAgIGNvbHVtbi50b2dnbGUgPyBcImFjdGl2ZVwiIDogXCJcIlxuICAgICAgICAgIH1gfVxuICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBhcmlhLXByZXNzZWQ9e2NvbHVtbi50b2dnbGUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNvbHVtblRvZ2dsZShjb2x1bW4uZGF0YUZpZWxkKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjb2x1bW4udGV4dH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICApKX1cbiAgPC9kaXY+XG4pO1xuXG5cblxuLy8gVG9nZ2xlTGlzdC5kZWZhdWx0UHJvcHMgPSB7XG4vLyAgIGJ0bkNsYXNzTmFtZTogXCJcIixcbi8vICAgY2xhc3NOYW1lOiBcIlwiLFxuLy8gICBjb250ZXh0dWFsOiBcInByaW1hcnlcIixcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IFRvZ2dsZUxpc3Q7XG4iLCIoZnVuY3Rpb24oYSxiKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLGIpO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGV4cG9ydHMpYigpO2Vsc2V7YigpLGEuRmlsZVNhdmVyPXtleHBvcnRzOnt9fS5leHBvcnRzfX0pKHRoaXMsZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGEsYil7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIGI/Yj17YXV0b0JvbTohMX06XCJvYmplY3RcIiE9dHlwZW9mIGImJihjb25zb2xlLndhcm4oXCJEZXByZWNhdGVkOiBFeHBlY3RlZCB0aGlyZCBhcmd1bWVudCB0byBiZSBhIG9iamVjdFwiKSxiPXthdXRvQm9tOiFifSksYi5hdXRvQm9tJiYvXlxccyooPzp0ZXh0XFwvXFxTKnxhcHBsaWNhdGlvblxcL3htbHxcXFMqXFwvXFxTKlxcK3htbClcXHMqOy4qY2hhcnNldFxccyo9XFxzKnV0Zi04L2kudGVzdChhLnR5cGUpP25ldyBCbG9iKFtcIlxcdUZFRkZcIixhXSx7dHlwZTphLnR5cGV9KTphfWZ1bmN0aW9uIGMoYSxiLGMpe3ZhciBkPW5ldyBYTUxIdHRwUmVxdWVzdDtkLm9wZW4oXCJHRVRcIixhKSxkLnJlc3BvbnNlVHlwZT1cImJsb2JcIixkLm9ubG9hZD1mdW5jdGlvbigpe2coZC5yZXNwb25zZSxiLGMpfSxkLm9uZXJyb3I9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiY291bGQgbm90IGRvd25sb2FkIGZpbGVcIil9LGQuc2VuZCgpfWZ1bmN0aW9uIGQoYSl7dmFyIGI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Iub3BlbihcIkhFQURcIixhLCExKTt0cnl7Yi5zZW5kKCl9Y2F0Y2goYSl7fXJldHVybiAyMDA8PWIuc3RhdHVzJiYyOTk+PWIuc3RhdHVzfWZ1bmN0aW9uIGUoYSl7dHJ5e2EuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudChcImNsaWNrXCIpKX1jYXRjaChjKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRzXCIpO2IuaW5pdE1vdXNlRXZlbnQoXCJjbGlja1wiLCEwLCEwLHdpbmRvdywwLDAsMCw4MCwyMCwhMSwhMSwhMSwhMSwwLG51bGwpLGEuZGlzcGF0Y2hFdmVudChiKX19dmFyIGY9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LndpbmRvdz09PXdpbmRvdz93aW5kb3c6XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYuc2VsZj09PXNlbGY/c2VsZjpcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwuZ2xvYmFsPT09Z2xvYmFsP2dsb2JhbDp2b2lkIDAsYT1mLm5hdmlnYXRvciYmL01hY2ludG9zaC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmL0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhL1NhZmFyaS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxnPWYuc2F2ZUFzfHwoXCJvYmplY3RcIiE9dHlwZW9mIHdpbmRvd3x8d2luZG93IT09Zj9mdW5jdGlvbigpe306XCJkb3dubG9hZFwiaW4gSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlJiYhYT9mdW5jdGlvbihiLGcsaCl7dmFyIGk9Zi5VUkx8fGYud2Via2l0VVJMLGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7Zz1nfHxiLm5hbWV8fFwiZG93bmxvYWRcIixqLmRvd25sb2FkPWcsai5yZWw9XCJub29wZW5lclwiLFwic3RyaW5nXCI9PXR5cGVvZiBiPyhqLmhyZWY9YixqLm9yaWdpbj09PWxvY2F0aW9uLm9yaWdpbj9lKGopOmQoai5ocmVmKT9jKGIsZyxoKTplKGosai50YXJnZXQ9XCJfYmxhbmtcIikpOihqLmhyZWY9aS5jcmVhdGVPYmplY3RVUkwoYiksc2V0VGltZW91dChmdW5jdGlvbigpe2kucmV2b2tlT2JqZWN0VVJMKGouaHJlZil9LDRFNCksc2V0VGltZW91dChmdW5jdGlvbigpe2Uoail9LDApKX06XCJtc1NhdmVPck9wZW5CbG9iXCJpbiBuYXZpZ2F0b3I/ZnVuY3Rpb24oZixnLGgpe2lmKGc9Z3x8Zi5uYW1lfHxcImRvd25sb2FkXCIsXCJzdHJpbmdcIiE9dHlwZW9mIGYpbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYihmLGgpLGcpO2Vsc2UgaWYoZChmKSljKGYsZyxoKTtlbHNle3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2kuaHJlZj1mLGkudGFyZ2V0PVwiX2JsYW5rXCIsc2V0VGltZW91dChmdW5jdGlvbigpe2UoaSl9KX19OmZ1bmN0aW9uKGIsZCxlLGcpe2lmKGc9Z3x8b3BlbihcIlwiLFwiX2JsYW5rXCIpLGcmJihnLmRvY3VtZW50LnRpdGxlPWcuZG9jdW1lbnQuYm9keS5pbm5lclRleHQ9XCJkb3dubG9hZGluZy4uLlwiKSxcInN0cmluZ1wiPT10eXBlb2YgYilyZXR1cm4gYyhiLGQsZSk7dmFyIGg9XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIj09PWIudHlwZSxpPS9jb25zdHJ1Y3Rvci9pLnRlc3QoZi5IVE1MRWxlbWVudCl8fGYuc2FmYXJpLGo9L0NyaU9TXFwvW1xcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2lmKChqfHxoJiZpfHxhKSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZpbGVSZWFkZXIpe3ZhciBrPW5ldyBGaWxlUmVhZGVyO2sub25sb2FkZW5kPWZ1bmN0aW9uKCl7dmFyIGE9ay5yZXN1bHQ7YT1qP2E6YS5yZXBsYWNlKC9eZGF0YTpbXjtdKjsvLFwiZGF0YTphdHRhY2htZW50L2ZpbGU7XCIpLGc/Zy5sb2NhdGlvbi5ocmVmPWE6bG9jYXRpb249YSxnPW51bGx9LGsucmVhZEFzRGF0YVVSTChiKX1lbHNle3ZhciBsPWYuVVJMfHxmLndlYmtpdFVSTCxtPWwuY3JlYXRlT2JqZWN0VVJMKGIpO2c/Zy5sb2NhdGlvbj1tOmxvY2F0aW9uLmhyZWY9bSxnPW51bGwsc2V0VGltZW91dChmdW5jdGlvbigpe2wucmV2b2tlT2JqZWN0VVJMKG0pfSw0RTQpfX0pO2Yuc2F2ZUFzPWcuc2F2ZUFzPWcsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSYmKG1vZHVsZS5leHBvcnRzPWcpfSk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZpbGVTYXZlci5taW4uanMubWFwIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgRXhwb3J0Q1NWQnV0dG9uIGZyb20gJy4vYnV0dG9uJztcblxuZXhwb3J0IGRlZmF1bHQgeyBFeHBvcnRDU1ZCdXR0b24gfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX187IiwiLyogZXNsaW50IG5vLXVubmVlZGVkLXRlcm5hcnk6IDAgKi9cbmltcG9ydCBGaWxlU2F2ZXIgZnJvbSBcImZpbGUtc2F2ZXJcIjtcblxuZXhwb3J0IGNvbnN0IGdldE1ldGFJbmZvID0gKGNvbHVtbnM6IGFueSkgPT5cbiAgY29sdW1uc1xuICAgIC5tYXAoKGNvbHVtbjogYW55KSA9PiAoe1xuICAgICAgZmllbGQ6IGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICB0eXBlOiBjb2x1bW4uY3N2VHlwZSB8fCBTdHJpbmcsXG4gICAgICBmb3JtYXR0ZXI6IGNvbHVtbi5jc3ZGb3JtYXR0ZXIsXG4gICAgICBmb3JtYXRFeHRyYURhdGE6IGNvbHVtbi5mb3JtYXRFeHRyYURhdGEsXG4gICAgICBoZWFkZXI6IGNvbHVtbi5jc3ZUZXh0IHx8IGNvbHVtbi50ZXh0LFxuICAgICAgZXhwb3J0OiBjb2x1bW4uY3N2RXhwb3J0ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgIHJvdzogTnVtYmVyKGNvbHVtbi5yb3cpIHx8IDAsXG4gICAgICByb3dTcGFuOiBOdW1iZXIoY29sdW1uLnJvd1NwYW4pIHx8IDEsXG4gICAgICBjb2xTcGFuOiBOdW1iZXIoY29sdW1uLmNvbFNwYW4pIHx8IDEsXG4gICAgICBmb290ZXI6IGNvbHVtbi5mb290ZXIsXG4gICAgICBmb290ZXJGb3JtYXR0ZXI6IGNvbHVtbi5mb290ZXJGb3JtYXR0ZXIsXG4gICAgfSkpXG4gICAgLmZpbHRlcigoXzogYW55KSA9PiBfLmV4cG9ydCk7XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm0gPSAoXG4gIGRhdGE6IGFueSxcbiAgbWV0YTogYW55LFxuICBjb2x1bW5zOiBhbnksXG4gIF86IGFueSxcbiAgeyBzZXBhcmF0b3IsIGlnbm9yZUhlYWRlciwgaWdub3JlRm9vdGVyIH06IGFueVxuKSA9PiB7XG4gIGNvbnN0IHZpc2libGVDb2x1bW5zID0gbWV0YS5maWx0ZXIoKG06IGFueSkgPT4gbS5leHBvcnQpO1xuICBsZXQgY29udGVudCA9IFwiXCI7XG4gIC8vIGV4dHJhY3QgY3N2IGhlYWRlclxuICBpZiAoIWlnbm9yZUhlYWRlcikge1xuICAgIGNvbnRlbnQgKz0gdmlzaWJsZUNvbHVtbnMubWFwKChtOiBhbnkpID0+IGBcIiR7bS5oZWFkZXJ9XCJgKS5qb2luKHNlcGFyYXRvcik7XG4gICAgY29udGVudCArPSBcIlxcblwiO1xuICB9XG4gIC8vIGV4dHJhY3QgY3N2IGJvZHlcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gY29udGVudDtcbiAgY29udGVudCArPSBkYXRhXG4gICAgLm1hcCgocm93OiBhbnksIHJvd0luZGV4OiBhbnkpID0+XG4gICAgICB2aXNpYmxlQ29sdW1uc1xuICAgICAgICAubWFwKChtOiBhbnkpID0+IHtcbiAgICAgICAgICBsZXQgY2VsbENvbnRlbnQgPSBfLmdldChyb3csIG0uZmllbGQpO1xuICAgICAgICAgIGlmIChtLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgY2VsbENvbnRlbnQgPSBtLmZvcm1hdHRlcihcbiAgICAgICAgICAgICAgY2VsbENvbnRlbnQsXG4gICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgIG0uZm9ybWF0RXh0cmFEYXRhXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobS50eXBlID09PSBTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBgXCIke2Ake2NlbGxDb250ZW50fWAucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjZWxsQ29udGVudDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oc2VwYXJhdG9yKVxuICAgIClcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBpZiAoIWlnbm9yZUZvb3Rlcikge1xuICAgIGNvbnRlbnQgKz0gXCJcXG5cIjtcbiAgICBjb250ZW50ICs9IHZpc2libGVDb2x1bW5zXG4gICAgICAubWFwKChtOiBhbnksIGk6IGFueSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIG0uZm9vdGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gXy5wbHVjayhkYXRhLCBjb2x1bW5zW2ldLmRhdGFGaWVsZCk7XG4gICAgICAgICAgcmV0dXJuIGBcIiR7bS5mb290ZXIoY29sdW1uRGF0YSwgY29sdW1uc1tpXSwgaSl9XCJgO1xuICAgICAgICB9IGVsc2UgaWYgKG0uZm9vdGVyRm9ybWF0dGVyKSB7XG4gICAgICAgICAgcmV0dXJuIGBcIiR7bS5mb290ZXJGb3JtYXR0ZXIoY29sdW1uc1tpXSwgaSl9XCJgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgXCIke20uZm9vdGVyfVwiYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihzZXBhcmF0b3IpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IHNhdmUgPSAoY29udGVudDogYW55LCB7IG5vQXV0b0JPTSwgZmlsZU5hbWUsIGJsb2JUeXBlIH06IGFueSkgPT4ge1xuICBGaWxlU2F2ZXIuc2F2ZUFzKFxuICAgIG5ldyBCbG9iKFtjb250ZW50XSwgeyB0eXBlOiBibG9iVHlwZSB9KSxcbiAgICBmaWxlTmFtZSxcbiAgICBub0F1dG9CT01cbiAgKTtcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjc3ZPcGVyYXRpb24gZnJvbSAnLi9jc3YnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNzdk9wZXJhdGlvblxufTtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IFNlYXJjaEJhciBmcm9tICcuL1NlYXJjaEJhcic7XG5pbXBvcnQgQ2xlYXJTZWFyY2hCdXR0b24gZnJvbSAnLi9jbGVhci1idXR0b24nO1xuXG5leHBvcnQgZGVmYXVsdCB7IFNlYXJjaEJhciwgQ2xlYXJTZWFyY2hCdXR0b24gfTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgbm8tY29udGludWU6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cbi8qIGVzbGludCBjbGFzcy1tZXRob2RzLXVzZS10aGlzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTZWFyY2hNYXRjaFByb3BzLCBUYWJsZVNlYXJjaFByb3BzIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmludGVyZmFjZSBEYXRhQ2hhbmdlTGlzdGVuZXIge1xuICBlbWl0OiAoZXZlbnQ6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIFNlYXJjaFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBTZWFyY2hNYXRjaFByb3BzIHtcbiAgZGF0YTogYW55W107XG4gIGRhdGFDaGFuZ2VMaXN0ZW5lcj86IERhdGFDaGFuZ2VMaXN0ZW5lcjtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuaW50ZXJmYWNlIFNlYXJjaFByb3ZpZGVyU3RhdGUge1xuICBkYXRhOiBhbnlbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKFxuICAgIG9wdGlvbnM6IFRhYmxlU2VhcmNoUHJvcHMgPSB7XG4gICAgICBzZWFyY2hGb3JtYXR0ZWQ6IGZhbHNlLFxuICAgICAgYWZ0ZXJTZWFyY2g6IHVuZGVmaW5lZCxcbiAgICAgIG9uQ29sdW1uTWF0Y2g6ICgpID0+IGZhbHNlLFxuICAgIH1cbiAgKSA9PlxuICAoXG4gICAgXzogYW55LFxuICAgIGlzUmVtb3RlU2VhcmNoOiAoKSA9PiBib29sZWFuLFxuICAgIGhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZTogKHNlYXJjaFRleHQ6IHN0cmluZykgPT4gdm9pZFxuICApID0+IHtcbiAgICBjb25zdCBTZWFyY2hDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuXG4gICAgY2xhc3MgU2VhcmNoUHJvdmlkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gICAgICBTZWFyY2hQcm92aWRlclByb3BzLFxuICAgICAgU2VhcmNoUHJvdmlkZXJTdGF0ZVxuICAgID4ge1xuICAgICAgY29uc3RydWN0b3IocHJvcHM6IFNlYXJjaFByb3ZpZGVyUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICBsZXQgaW5pdGlhbERhdGEgPSBwcm9wcy5kYXRhO1xuICAgICAgICBpZiAoaXNSZW1vdGVTZWFyY2goKSAmJiB0aGlzLnByb3BzLnNlYXJjaFRleHQgIT09IFwiXCIpIHtcbiAgICAgICAgICBoYW5kbGVSZW1vdGVTZWFyY2hDaGFuZ2UodGhpcy5wcm9wcy5zZWFyY2hUZXh0ISk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5pdGlhbERhdGEgPSB0aGlzLnNlYXJjaChwcm9wcyk7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyTGlzdGVuZXIoaW5pdGlhbERhdGEsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IGRhdGE6IGluaXRpYWxEYXRhIH07XG4gICAgICB9XG5cbiAgICAgIGdldFNlYXJjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5kYXRhO1xuICAgICAgfVxuXG4gICAgICB0cmlnZ2VyTGlzdGVuZXIocmVzdWx0OiBhbnksIHNraXBJbml0PzogYW55KSB7XG4gICAgICAgIGlmIChvcHRpb25zLmFmdGVyU2VhcmNoICYmICFza2lwSW5pdCkge1xuICAgICAgICAgIG9wdGlvbnMuYWZ0ZXJTZWFyY2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kYXRhQ2hhbmdlTGlzdGVuZXIpIHtcbiAgICAgICAgICB0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lci5lbWl0KFwiZmlsdGVyQ2hhbmdlZFwiLCByZXN1bHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBTZWFyY2hQcm92aWRlclByb3BzKSB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMuc2VhcmNoVGV4dCAhPT0gdGhpcy5wcm9wcy5zZWFyY2hUZXh0KSB7XG4gICAgICAgICAgaWYgKGlzUmVtb3RlU2VhcmNoKCkpIHtcbiAgICAgICAgICAgIGhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSh0aGlzLnByb3BzLnNlYXJjaFRleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNlYXJjaCh0aGlzLnByb3BzKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxpc3RlbmVyKHJlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpc1JlbW90ZVNlYXJjaCgpKSB7XG4gICAgICAgICAgICBpZiAoIV8uaXNFcXVhbCh0aGlzLnN0YXRlLmRhdGEsIHRoaXMucHJvcHMuZGF0YSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGRhdGE6IHRoaXMucHJvcHMuZGF0YSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFfLmlzRXF1YWwocHJldlByb3BzLmRhdGEsIHRoaXMucHJvcHMuZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoKHRoaXMucHJvcHMpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTGlzdGVuZXIocmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VhcmNoKHByb3BzOiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBjb2x1bW5zIH0gPSBwcm9wcztcbiAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHByb3BzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSwgcmlkeDogYW55KSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgY2lkeCA9IDA7IGNpZHggPCBjb2x1bW5zLmxlbmd0aDsgY2lkeCArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2NpZHhdO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5zZWFyY2hhYmxlID09PSBmYWxzZSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0VmFsdWUgPSBfLmdldChyb3csIGNvbHVtbi5kYXRhRmllbGQpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgb3B0aW9ucy5zZWFyY2hGb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUgPSBjb2x1bW4uZm9ybWF0dGVyKFxuICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlLFxuICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICByaWR4LFxuICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRFeHRyYURhdGFcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZpbHRlclZhbHVlKSB7XG4gICAgICAgICAgICAgIHRhcmdldFZhbHVlID0gY29sdW1uLmZpbHRlclZhbHVlKHRhcmdldFZhbHVlLCByb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMub25Db2x1bW5NYXRjaCkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vbkNvbHVtbk1hdGNoKHtcbiAgICAgICAgICAgICAgICAgIHNlYXJjaFRleHQsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogdGFyZ2V0VmFsdWUsXG4gICAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh0YXJnZXRWYWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGFyZ2V0VmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA9IHRhcmdldFZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VmFsdWUuaW5kZXhPZihzZWFyY2hUZXh0KSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxTZWFyY2hDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IGRhdGE6IHRoaXMuc3RhdGUuZGF0YSB9fT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgIDwvU2VhcmNoQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgUHJvdmlkZXI6IFNlYXJjaFByb3ZpZGVyLFxuICAgICAgQ29uc3VtZXI6IFNlYXJjaENvbnRleHQuQ29uc3VtZXIsXG4gICAgfTtcbiAgfTtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IFRvZ2dsZUxpc3QgZnJvbSAnLi90b2dnbGUtbGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHsgVG9nZ2xlTGlzdCB9O1xuIiwiLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFRhYmxlVG9vbGtpdFByb3BzLCBUb29sa2l0Q29udGV4dFR5cGUgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IGNyZWF0ZVNlYXJjaENvbnRleHQgZnJvbSBcIi4vc3JjL3NlYXJjaC9jb250ZXh0XCI7XG5pbXBvcnQgc3RhdGVsZXNzRGVjb3JhdG9yIGZyb20gXCIuL3N0YXRlbGVzc09wXCI7XG5cbmNvbnN0IFRvb2xraXRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxUb29sa2l0Q29udGV4dFR5cGU+KHtcbiAgc2VhcmNoUHJvcHM6IHtcbiAgICBzZWFyY2hUZXh0OiBcIlwiLFxuICAgIG9uU2VhcmNoOiAodmFsOiBzdHJpbmcpID0+IHt9LFxuICAgIG9uQ2xlYXI6ICgpID0+IHt9LFxuICB9LFxuICBjc3ZQcm9wczoge1xuICAgIG9uRXhwb3J0OiAoKSA9PiB7fSxcbiAgfSxcbiAgY29sdW1uVG9nZ2xlUHJvcHM6IHtcbiAgICBjb2x1bW5zOiBbXSxcbiAgICB0b2dnbGVzOiBbXSxcbiAgICBvbkNvbHVtblRvZ2dsZTogKGRhdGFGaWVsZDogc3RyaW5nKSA9PiB7fSxcbiAgfSxcbiAgYmFzZVByb3BzOiB7XG4gICAga2V5RmllbGQ6IHVuZGVmaW5lZCxcbiAgICBjb2x1bW5zOiBbXSxcbiAgICBkYXRhOiBbXSxcbiAgICBib290c3RyYXA0OiB1bmRlZmluZWQsXG4gIH0sXG59KTtcblxuY2xhc3MgVG9vbGtpdFByb3ZpZGVyIGV4dGVuZHMgc3RhdGVsZXNzRGVjb3JhdG9yKFJlYWN0LkNvbXBvbmVudCkge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHNlYXJjaDogZmFsc2UsXG4gICAgZXhwb3J0Q1NWOiBmYWxzZSxcbiAgICBib290c3RyYXA0OiBmYWxzZSxcbiAgfTtcblxuICBfOiBhbnk7XG4gIHN0YXRlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFRhYmxlVG9vbGtpdFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGNvbHVtblRvZ2dsZToge30sXG4gICAgICBzZWFyY2hUZXh0OlxuICAgICAgICB0eXBlb2YgcHJvcHMuc2VhcmNoID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgPyBwcm9wcy5zZWFyY2guZGVmYXVsdFNlYXJjaCB8fCBcIlwiXG4gICAgICAgICAgOiBcIlwiLFxuICAgIH07XG4gICAgdGhpcy5fID0gbnVsbDtcbiAgICB0aGlzLm9uQ2xlYXIgPSB0aGlzLm9uQ2xlYXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uU2VhcmNoID0gdGhpcy5vblNlYXJjaC5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25Db2x1bW5Ub2dnbGUgPSB0aGlzLm9uQ29sdW1uVG9nZ2xlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zZXREZXBlbmRlbmN5TW9kdWxlcyA9IHRoaXMuc2V0RGVwZW5kZW5jeU1vZHVsZXMuYmluZCh0aGlzKTtcblxuICAgIGlmIChwcm9wcy5jb2x1bW5Ub2dnbGUpIHtcbiAgICAgIGluaXRpYWxTdGF0ZS5jb2x1bW5Ub2dnbGUgPSBwcm9wcy5jb2x1bW5zLnJlZHVjZShcbiAgICAgICAgKG9iajogYW55LCBjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICAgIG9ialtjb2x1bW4uZGF0YUZpZWxkXSA9ICFjb2x1bW4uaGlkZGVuO1xuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0sXG4gICAgICAgIHt9XG4gICAgICApO1xuICAgIH1cbiAgICBpbml0aWFsU3RhdGUuc2VhcmNoVGV4dCA9XG4gICAgICB0eXBlb2YgcHJvcHMuc2VhcmNoID09PSBcIm9iamVjdFwiID8gcHJvcHMuc2VhcmNoLmRlZmF1bHRTZWFyY2ggfHwgXCJcIiA6IFwiXCI7XG4gICAgdGhpcy5zdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHM6IFRhYmxlVG9vbGtpdFByb3BzLCBzdGF0ZTogYW55KSB7XG4gICAgY29uc3QgY3VyckNvbHVtblRvZ2dsZSA9IHN0YXRlLmNvbHVtblRvZ2dsZTtcbiAgICBsZXQgcHJvcHNDb2x1bW5Ub2dnbGU7XG4gICAgaWYgKHByb3BzLmNvbHVtblRvZ2dsZSkge1xuICAgICAgcHJvcHNDb2x1bW5Ub2dnbGUgPSBwcm9wcy5jb2x1bW5zLnJlZHVjZSgob2JqOiBhbnksIGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIG9ialtjb2x1bW4uZGF0YUZpZWxkXSA9ICFjb2x1bW4uaGlkZGVuO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wc0NvbHVtblRvZ2dsZSA9IHt9O1xuICAgIH1cbiAgICBpZiAoY3VyckNvbHVtblRvZ2dsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGN1cnJDb2x1bW5Ub2dnbGUsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgcHJvcHNDb2x1bW5Ub2dnbGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKHNlYXJjaFRleHQ6IGFueSkge1xuICAgIGlmIChzZWFyY2hUZXh0ICE9PSB0aGlzLnN0YXRlLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2hUZXh0IH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xlYXIoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNlYXJjaFRleHQ6IFwiXCIgfSk7XG4gIH1cblxuICBvbkNvbHVtblRvZ2dsZShkYXRhRmllbGQ6IGFueSkge1xuICAgIGNvbnN0IHsgY29sdW1uVG9nZ2xlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbHVtblRvZ2dsZVtkYXRhRmllbGRdID0gIWNvbHVtblRvZ2dsZVtkYXRhRmllbGRdO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgIGNvbHVtblRvZ2dsZSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsqfSBfXG4gICAqIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb25seSBvbmUgdGltZSB3aGVuIHRhYmxlIHJlbmRlclxuICAgKiByZWFjdC1ib290c3RyYXAtdGFibGUtbmcvc3JjL2NvbnRleHQvaW5kZXguanMgd2lsbCBjYWxsIHRoaXMgY2IgZm9yIHBhc3NpbmcgdGhlIF8gbW9kdWxlXG4gICAqIFBsZWFzZSBjb25zaWRlciB0byBleHRyYWN0IGEgY29tbW9uIG1vZHVsZSB0byBoYW5kbGUgXyBtb2R1bGUuXG4gICAqIHRoaXMgaXMganVzdCBhIHF1aWNrIGZpeFxuICAgKi9cbiAgc2V0RGVwZW5kZW5jeU1vZHVsZXMoXzogYW55KSB7XG4gICAgdGhpcy5fID0gXztcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBiYXNlUHJvcHM6IFRhYmxlVG9vbGtpdFByb3BzID0ge1xuICAgICAga2V5RmllbGQ6IHRoaXMucHJvcHMua2V5RmllbGQsXG4gICAgICBjb2x1bW5zOiB0aGlzLnByb3BzLmNvbHVtbnMsXG4gICAgICBkYXRhOiB0aGlzLnByb3BzLmRhdGEsXG4gICAgICBzZWFyY2g6IHRoaXMucHJvcHMuc2VhcmNoID8/IGZhbHNlLFxuICAgICAgZXhwb3J0Q1NWOiB0aGlzLnByb3BzLmV4cG9ydENTViA/PyBmYWxzZSxcbiAgICAgIGJvb3RzdHJhcDQ6IHRoaXMucHJvcHMuYm9vdHN0cmFwNCA/PyBmYWxzZSxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnByb3BzLmNoaWxkcmVuLFxuICAgICAgc2V0RGVwZW5kZW5jeU1vZHVsZXM6IHRoaXMuc2V0RGVwZW5kZW5jeU1vZHVsZXMsXG4gICAgICByZWdpc3RlckV4cG9zZWRBUEk6IHRoaXMucmVnaXN0ZXJFeHBvc2VkQVBJLFxuICAgIH07XG4gICAgaWYgKHRoaXMucHJvcHMuc2VhcmNoKSB7XG4gICAgICBiYXNlUHJvcHMuc2VhcmNoID0ge1xuICAgICAgICBzZWFyY2hDb250ZXh0OiBjcmVhdGVTZWFyY2hDb250ZXh0KHRoaXMucHJvcHMuc2VhcmNoKSxcbiAgICAgICAgc2VhcmNoVGV4dDogdGhpcy5zdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuY29sdW1uVG9nZ2xlKSB7XG4gICAgICBiYXNlUHJvcHMuY29sdW1uVG9nZ2xlID0ge1xuICAgICAgICB0b2dnbGVzOiB0aGlzLnN0YXRlLmNvbHVtblRvZ2dsZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8VG9vbGtpdENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICBzZWFyY2hQcm9wczoge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogdGhpcy5zdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgb25TZWFyY2g6IHRoaXMub25TZWFyY2gsXG4gICAgICAgICAgICBvbkNsZWFyOiB0aGlzLm9uQ2xlYXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjc3ZQcm9wczoge1xuICAgICAgICAgICAgb25FeHBvcnQ6IHRoaXMuaGFuZGxlRXhwb3J0Q1NWLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sdW1uVG9nZ2xlUHJvcHM6IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMucHJvcHMuY29sdW1ucyxcbiAgICAgICAgICAgIHRvZ2dsZXM6IHRoaXMuc3RhdGUuY29sdW1uVG9nZ2xlLFxuICAgICAgICAgICAgb25Db2x1bW5Ub2dnbGU6IHRoaXMub25Db2x1bW5Ub2dnbGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiYXNlUHJvcHMsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC9Ub29sa2l0Q29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgUHJvdmlkZXI6IFRvb2xraXRQcm92aWRlcixcbiAgQ29uc3VtZXI6IFRvb2xraXRDb250ZXh0LkNvbnN1bWVyLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENvbHVtbkRlc2NyaXB0aW9uLCBTZWFyY2hQcm9wcyB9IGZyb20gXCJyZWFjdC1ib290c3RyYXAtdGFibGUtbmdcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vY29udGV4dFwiO1xuaW1wb3J0IFRvb2xraXRQcm92aWRlciBmcm9tIFwiLi9wcm92aWRlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBUb29sa2l0UHJvdmlkZXI7XG5leHBvcnQgY29uc3QgVG9vbGtpdENvbnRleHQgPSBDb250ZXh0O1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbHVtblRvZ2dsZSB9IGZyb20gXCIuL3NyYy9jb2x1bW4tdG9nZ2xlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTVkV4cG9ydCB9IGZyb20gXCIuL3NyYy9jc3ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VhcmNoIH0gZnJvbSBcIi4vc3JjL3NlYXJjaFwiO1xuXG4vKipcbiAqIGRlY2xhcmF0aW9uIGZvciB0YWJsZSB0b29sa2l0IHN1YiBtb2R1bGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmplY3RlZFNlYXJjaFByb3BzIHtcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBvblNlYXJjaDogKHZhbDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNsZWFyOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaE1hdGNoUHJvcHM8VCBleHRlbmRzIG9iamVjdCA9IGFueT4ge1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb248VD47XG4gIHJvdzogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZVNlYXJjaFByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IHtcbiAgc2VhcmNoRm9ybWF0dGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdFNlYXJjaD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG9uQ29sdW1uTWF0Y2g/OiAocHJvcHM6IFNlYXJjaE1hdGNoUHJvcHM8VD4pID0+IGJvb2xlYW47XG4gIGN1c3RvbU1hdGNoRnVuYz86ICgocHJvcHM6IFNlYXJjaE1hdGNoUHJvcHM8VD4pID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkO1xuICBhZnRlclNlYXJjaD86IChuZXdSZXN1bHQ6IFRbXSkgPT4gdm9pZCB8IHVuZGVmaW5lZDtcbiAgc2VhcmNoQ29udGV4dD86IEZ1bmN0aW9uO1xuICBzZWFyY2hUZXh0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENTVlByb3BzIHtcbiAgZmlsZU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNlcGFyYXRvcj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWdub3JlSGVhZGVyPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaWdub3JlRm9vdGVyPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgbm9BdXRvQk9NPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIGRlZmF1bHQgaXMgdGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04XG4gICAqL1xuICBibG9iVHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZXhwb3J0QWxsPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgb25seUV4cG9ydFNlbGVjdGlvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG9ubHlFeHBvcnRGaWx0ZXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVUb29sa2l0UHJvcHM8VCBleHRlbmRzIG9iamVjdCA9IGFueT4ge1xuICBib290c3RyYXA0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc2VhcmNoPzogVGFibGVTZWFyY2hQcm9wczxUPiB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGtleUZpZWxkOiBrZXlvZiBUIHwgc3RyaW5nO1xuICBkYXRhOiBUW107XG4gIHJlZj86IGFueTtcbiAgY29sdW1uczogQXJyYXk8Q29sdW1uRGVzY3JpcHRpb248VD4+O1xuICBjaGlsZHJlbjogKHByb3BzOiBUb29sa2l0Q29udGV4dFR5cGUpID0+IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgZXhwb3J0Q1NWPzogYm9vbGVhbiB8IENTVlByb3BzIHwgdW5kZWZpbmVkO1xuICBjb2x1bW5Ub2dnbGU/OiB7IFtkYXRhRmllbGQ6IHN0cmluZ106IGJvb2xlYW4gfSB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHNldERlcGVuZGVuY3lNb2R1bGVzPzogRnVuY3Rpb247XG4gIHJlZ2lzdGVyRXhwb3NlZEFQST86IEZ1bmN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xraXRDb250ZXh0VHlwZSB7XG4gIHNlYXJjaFByb3BzOiBJbmplY3RlZFNlYXJjaFByb3BzO1xuICBjc3ZQcm9wczoge1xuICAgIG9uRXhwb3J0OiAoc291cmNlPzogYW55KSA9PiB2b2lkO1xuICB9O1xuICBjb2x1bW5Ub2dnbGVQcm9wczoge1xuICAgIGNvbHVtbnM6IENvbHVtbkRlc2NyaXB0aW9uW107XG4gICAgLyoqXG4gICAgICogYXJyYXkgb2YgdG9nZ2xlZCBjb2x1bW5zXG4gICAgICovXG4gICAgdG9nZ2xlczogYm9vbGVhbltdO1xuICAgIG9uQ29sdW1uVG9nZ2xlOiAoZGF0YUZpZWxkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIH07XG4gIGJhc2VQcm9wczoge1xuICAgIC8qKlxuICAgICAqIHRhYmxlIGtleSBmaWVsZFxuICAgICAqL1xuICAgIGtleUZpZWxkOiBhbnk7XG4gICAgY29sdW1uczogQ29sdW1uRGVzY3JpcHRpb25bXTtcbiAgICBkYXRhOiBhbnlbXTtcbiAgICBib290c3RyYXA0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2dnbGVMaXN0UHJvcHMge1xuICBjb2x1bW5zOiBDb2x1bW5EZXNjcmlwdGlvbltdO1xuICAvKipcbiAgICogYXJyYXkgb2YgdG9nZ2xlZCBjb2x1bW5zXG4gICAqL1xuICB0b2dnbGVzOiBib29sZWFuW107XG4gIG9uQ29sdW1uVG9nZ2xlOiAoZGF0YUZpZWxkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGJ0bkNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb250ZXh0dWFsPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydENTVkJ1dHRvblByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgb25FeHBvcnQ6ICgpID0+IHZvaWQ7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEJhclByb3BzPFQgPSBhbnk+IGV4dGVuZHMgU2VhcmNoUHJvcHM8VD4ge1xuICBjbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgZGVsYXk/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHNlYXJjaFRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRhYmxlSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlZj86IFJlYWN0LlJlZk9iamVjdDxSZWFjdC5Db21wb25lbnQ8U2VhcmNoUHJvcHM8VD4+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGVhclNlYXJjaEJ1dHRvblByb3BzIHtcbiAgb25DbGVhcj86ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0ZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuIiwiLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNlYXJjaEJhclByb3BzIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmNvbnN0IGhhbmRsZURlYm91bmNlID0gPFQgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IHZvaWQ+KFxuICBmdW5jOiBULFxuICB3YWl0OiBudW1iZXIsXG4gIGltbWVkaWF0ZT86IGJvb2xlYW5cbikgPT4ge1xuICBsZXQgdGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuICguLi5hcmdzOiBQYXJhbWV0ZXJzPFQ+KSA9PiB7XG4gICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7XG4gICAgICB0aW1lb3V0ID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgfHwgMCk7XG5cbiAgICBpZiAoY2FsbE5vdykge1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH07XG59O1xuXG5pbnRlcmZhY2UgU2VhcmNoQmFyU3RhdGUge1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5jbGFzcyBTZWFyY2hCYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8U2VhcmNoQmFyUHJvcHMsIFNlYXJjaEJhclN0YXRlPiB7XG4gIGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFNlYXJjaEJhclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2YWx1ZTogcHJvcHMuc2VhcmNoVGV4dCA/PyBcIlwiLFxuICAgIH07XG4gIH1cblxuICBvbkNoYW5nZVZhbHVlID0gKGU6IGFueSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogZS50YXJnZXQudmFsdWUgfSk7XG4gIH07XG5cbiAgb25LZXl1cCA9ICgpID0+IHtcbiAgICBjb25zdCB7IGRlbGF5ID0gMjUwLCBvblNlYXJjaCB9ID0gdGhpcy5wcm9wcyBhcyBhbnk7XG4gICAgY29uc3QgZGVib3VuY2VDYWxsYmFjayA9IGhhbmRsZURlYm91bmNlKCgpID0+IHtcbiAgICAgIG9uU2VhcmNoISh0aGlzLmlucHV0Py52YWx1ZSA/PyBcIlwiKTtcbiAgICB9LCBkZWxheSk7XG4gICAgZGVib3VuY2VDYWxsYmFjaygpO1xuICB9O1xuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFNlYXJjaEJhclByb3BzKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VhcmNoVGV4dCAhPT0gcHJldlByb3BzLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5wcm9wcy5zZWFyY2hUZXh0IHx8IFwiXCIgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSA9IFwiXCIsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgcGxhY2Vob2xkZXIgPSBcIlNlYXJjaFwiLFxuICAgICAgdGFibGVJZCA9IFwiMFwiLFxuICAgICAgc2VhcmNoVGV4dCA9IFwiU2VhcmNoIHRoaXMgdGFibGVcIixcbiAgICB9ID0gdGhpcy5wcm9wcyBhcyBhbnk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsIGh0bWxGb3I9e2BzZWFyY2gtYmFyLSR7dGFibGVJZH1gfSBjbGFzc05hbWU9XCJzZWFyY2gtbGFiZWxcIj5cbiAgICAgICAgPHNwYW4gaWQ9e2BzZWFyY2gtYmFyLSR7dGFibGVJZH0tbGFiZWxgfSBjbGFzc05hbWU9XCJzci1vbmx5XCI+XG4gICAgICAgICAge3NlYXJjaFRleHR9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgcmVmPXsobikgPT4geyB0aGlzLmlucHV0ID0gbjsgfX1cbiAgICAgICAgICBpZD17YHNlYXJjaC1iYXItJHt0YWJsZUlkfWB9XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHN0eWxlPXtzdHlsZSBhcyBhbnl9XG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtgc2VhcmNoLWJhci0ke3RhYmxlSWR9LWxhYmVsYH1cbiAgICAgICAgICBvbktleVVwPXsoKSA9PiB0aGlzLm9uS2V5dXAoKX1cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZVZhbHVlfVxuICAgICAgICAgIGNsYXNzTmFtZT17YGZvcm0tY29udHJvbCAke2NsYXNzTmFtZX1gfVxuICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgLz5cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgfVxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGNsYXNzTmFtZTogJycsXG4gICAgc3R5bGU6IHt9LFxuICAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoJyxcbiAgICBkZWxheTogMjUwLFxuICAgIHNlYXJjaFRleHQ6ICcnLFxuICAgIHRhYmxlSWQ6ICcwJyxcbiAgICBzclRleHQ6ICdTZWFyY2ggdGhpcyB0YWJsZSdcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VhcmNoQmFyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCIuL3NyYy9vcFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoQmFzZTogYW55KSA9PlxuICBjbGFzcyBTdGF0ZWxlc3NPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb24uY3N2T3BlcmF0aW9uKEJhc2UpIHtcbiAgICByZWdpc3RlckV4cG9zZWRBUEkgPSAodGFibGVFeHBvc2VkQVBJRW1pdHRlcjogYW55KSA9PiB7XG4gICAgICB0aGlzLnRhYmxlRXhwb3NlZEFQSUVtaXR0ZXIgPSB0YWJsZUV4cG9zZWRBUElFbWl0dGVyO1xuICAgIH07XG4gIH07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IGdldE1ldGFJbmZvLCBzYXZlLCB0cmFuc2Zvcm0gfSBmcm9tIFwiLi4vY3N2L2V4cG9ydGVyXCI7XG5cbmNvbnN0IGNzdkRlZmF1bHRPcHRpb25zID0ge1xuICBmaWxlTmFtZTogXCJzcHJlYWRzaGVldC5jc3ZcIixcbiAgc2VwYXJhdG9yOiBcIixcIixcbiAgaWdub3JlSGVhZGVyOiBmYWxzZSxcbiAgaWdub3JlRm9vdGVyOiB0cnVlLFxuICBub0F1dG9CT006IHRydWUsXG4gIGJsb2JUeXBlOiBcInRleHQvcGxhaW47Y2hhcnNldD11dGYtOFwiLFxuICBleHBvcnRBbGw6IHRydWUsXG4gIG9ubHlFeHBvcnRTZWxlY3Rpb246IGZhbHNlLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgKEJhc2U6IGFueSkgPT5cbiAgY2xhc3MgQ1NWT3BlcmF0aW9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHR5cGVvZiBCYXNlPiB7XG4gICAgXzogYW55O1xuICAgIHRhYmxlRXhwb3NlZEFQSUVtaXR0ZXI6IGFueTtcblxuICAgIGhhbmRsZUV4cG9ydENTViA9IChzb3VyY2U6IGFueSkgPT4ge1xuICAgICAgY29uc3QgeyBjb2x1bW5zLCBleHBvcnRDU1YsIGtleUZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbWV0YSA9IGdldE1ldGFJbmZvKGNvbHVtbnMpO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9XG4gICAgICAgIGV4cG9ydENTViA9PT0gdHJ1ZVxuICAgICAgICAgID8gY3N2RGVmYXVsdE9wdGlvbnNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgLi4uY3N2RGVmYXVsdE9wdGlvbnMsXG4gICAgICAgICAgICAgIC4uLmV4cG9ydENTVixcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIGdldCBkYXRhIGZvciBjc3YgZXhwb3J0XG4gICAgICBsZXQgZGF0YTogYW55O1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgZGF0YSA9IHNvdXJjZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5leHBvcnRBbGwpIHtcbiAgICAgICAgZGF0YSA9IHRoaXMucHJvcHMuZGF0YTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5vbmx5RXhwb3J0RmlsdGVyZWQpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogeyByZXN1bHQ6IGFueSB9ID0geyByZXN1bHQ6IHVuZGVmaW5lZCB9O1xuICAgICAgICB0aGlzLnRhYmxlRXhwb3NlZEFQSUVtaXR0ZXIuZW1pdChcImdldC5maWx0ZXJlZC5yb3dzXCIsIHBheWxvYWQpO1xuICAgICAgICBkYXRhID0gcGF5bG9hZC5yZXN1bHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0geyByZXN1bHQ6IHVuZGVmaW5lZCB9O1xuICAgICAgICB0aGlzLnRhYmxlRXhwb3NlZEFQSUVtaXR0ZXIuZW1pdChcImdldC50YWJsZS5kYXRhXCIsIHBheWxvYWQpO1xuICAgICAgICBkYXRhID0gcGF5bG9hZC5yZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIGZpbHRlciBkYXRhIGJ5IHJvdyBzZWxlY3Rpb25cbiAgICAgIGlmIChvcHRpb25zLm9ubHlFeHBvcnRTZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHsgcmVzdWx0OiB1bmRlZmluZWQgfTtcbiAgICAgICAgdGhpcy50YWJsZUV4cG9zZWRBUElFbWl0dGVyLmVtaXQoXCJnZXQuc2VsZWN0ZWQucm93c1wiLCBwYXlsb2FkKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9ucyA9IHBheWxvYWQucmVzdWx0ID8/IFtdO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcigocm93OiBhbnkpID0+IHNlbGVjdGlvbnMuaW5jbHVkZXMocm93W2tleUZpZWxkXSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gdHJhbnNmb3JtKGRhdGEsIG1ldGEsIGNvbHVtbnMsIHRoaXMuXywgb3B0aW9ucyk7XG4gICAgICBzYXZlKGNvbnRlbnQsIG9wdGlvbnMpO1xuICAgIH07XG4gIH07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IFRhYmxlVG9vbGtpdFByb3BzIH0gZnJvbSBcIi5cIjtcbmltcG9ydCBUb29sa2l0Q29udGV4dCBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmNvbnN0IFRvb2xraXRwcm92aWRlciA9IChcbiAgcHJvcHM6IFRhYmxlVG9vbGtpdFByb3BzXG4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsID0+IChcbiAgPFRvb2xraXRDb250ZXh0LlByb3ZpZGVyIHsuLi5wcm9wc30+XG4gICAgPFRvb2xraXRDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgeyh0b29rS2l0UHJvcHMpID0+IHByb3BzLmNoaWxkcmVuKHRvb2tLaXRQcm9wcyl9XG4gICAgPC9Ub29sa2l0Q29udGV4dC5Db25zdW1lcj5cbiAgPC9Ub29sa2l0Q29udGV4dC5Qcm92aWRlcj5cbik7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBUb29sa2l0cHJvdmlkZXI7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjg4KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fIiwiZXhwb3J0Q1NWQnV0dG9uRGVmYXVsdFByb3BzIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJwcm9wcyIsIm9uRXhwb3J0IiwiY2hpbGRyZW4iLCJyZXN0IiwidHlwZSIsIm9uQ2xpY2siLCJvbkNsZWFyIiwidGV4dCIsImNvbHVtbnMiLCJvbkNvbHVtblRvZ2dsZSIsInRvZ2dsZXMiLCJidG5DbGFzc05hbWUiLCJjb250ZXh0dWFsIiwibWFwIiwiY29sdW1uIiwidG9nZ2xlIiwiZGF0YUZpZWxkIiwia2V5IiwiYiIsImEiLCJhdXRvQm9tIiwiY29uc29sZSIsIndhcm4iLCJ0ZXN0IiwiQmxvYiIsImMiLCJkIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwicmVzcG9uc2VUeXBlIiwib25sb2FkIiwiZyIsInJlc3BvbnNlIiwib25lcnJvciIsImVycm9yIiwic2VuZCIsInN0YXR1cyIsImUiLCJkaXNwYXRjaEV2ZW50IiwiTW91c2VFdmVudCIsImRvY3VtZW50IiwiY3JlYXRlRXZlbnQiLCJpbml0TW91c2VFdmVudCIsIndpbmRvdyIsImYiLCJnbG9iYWwiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJzYXZlQXMiLCJIVE1MQW5jaG9yRWxlbWVudCIsInByb3RvdHlwZSIsImgiLCJpIiwiVVJMIiwid2Via2l0VVJMIiwiaiIsImNyZWF0ZUVsZW1lbnQiLCJuYW1lIiwiZG93bmxvYWQiLCJyZWwiLCJocmVmIiwib3JpZ2luIiwibG9jYXRpb24iLCJ0YXJnZXQiLCJjcmVhdGVPYmplY3RVUkwiLCJzZXRUaW1lb3V0IiwicmV2b2tlT2JqZWN0VVJMIiwibXNTYXZlT3JPcGVuQmxvYiIsInRpdGxlIiwiYm9keSIsImlubmVyVGV4dCIsIkhUTUxFbGVtZW50Iiwic2FmYXJpIiwiRmlsZVJlYWRlciIsImsiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJyZXBsYWNlIiwicmVhZEFzRGF0YVVSTCIsImwiLCJtIiwiRXhwb3J0Q1NWQnV0dG9uIiwiZ2V0TWV0YUluZm8iLCJmaWVsZCIsImNzdlR5cGUiLCJTdHJpbmciLCJmb3JtYXR0ZXIiLCJjc3ZGb3JtYXR0ZXIiLCJmb3JtYXRFeHRyYURhdGEiLCJoZWFkZXIiLCJjc3ZUZXh0IiwiZXhwb3J0IiwiY3N2RXhwb3J0Iiwicm93IiwiTnVtYmVyIiwicm93U3BhbiIsImNvbFNwYW4iLCJmb290ZXIiLCJmb290ZXJGb3JtYXR0ZXIiLCJmaWx0ZXIiLCJfIiwidHJhbnNmb3JtIiwiZGF0YSIsIm1ldGEiLCJzZXBhcmF0b3IiLCJpZ25vcmVIZWFkZXIiLCJpZ25vcmVGb290ZXIiLCJ2aXNpYmxlQ29sdW1ucyIsImNvbnRlbnQiLCJqb2luIiwibGVuZ3RoIiwicm93SW5kZXgiLCJjZWxsQ29udGVudCIsImdldCIsImNvbHVtbkRhdGEiLCJwbHVjayIsInNhdmUiLCJub0F1dG9CT00iLCJmaWxlTmFtZSIsImJsb2JUeXBlIiwiY3N2T3BlcmF0aW9uIiwiU2VhcmNoQmFyIiwiQ2xlYXJTZWFyY2hCdXR0b24iLCJvcHRpb25zIiwic2VhcmNoRm9ybWF0dGVkIiwiYWZ0ZXJTZWFyY2giLCJ1bmRlZmluZWQiLCJvbkNvbHVtbk1hdGNoIiwiaXNSZW1vdGVTZWFyY2giLCJoYW5kbGVSZW1vdGVTZWFyY2hDaGFuZ2UiLCJTZWFyY2hDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsIlNlYXJjaFByb3ZpZGVyIiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJzdXBlciIsImluaXRpYWxEYXRhIiwidGhpcyIsInNlYXJjaFRleHQiLCJzZWFyY2giLCJ0cmlnZ2VyTGlzdGVuZXIiLCJzdGF0ZSIsImdldFNlYXJjaGVkIiwic2tpcEluaXQiLCJkYXRhQ2hhbmdlTGlzdGVuZXIiLCJlbWl0IiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwic2V0U3RhdGUiLCJpc0VxdWFsIiwidG9Mb3dlckNhc2UiLCJyaWR4IiwiY2lkeCIsInNlYXJjaGFibGUiLCJ0YXJnZXRWYWx1ZSIsImZpbHRlclZhbHVlIiwidmFsdWUiLCJ0b1N0cmluZyIsImluZGV4T2YiLCJyZW5kZXIiLCJQcm92aWRlciIsIkNvbnN1bWVyIiwiVG9nZ2xlTGlzdCIsIlRvb2xraXRDb250ZXh0Iiwic2VhcmNoUHJvcHMiLCJvblNlYXJjaCIsInZhbCIsImNzdlByb3BzIiwiY29sdW1uVG9nZ2xlUHJvcHMiLCJiYXNlUHJvcHMiLCJrZXlGaWVsZCIsImJvb3RzdHJhcDQiLCJUb29sa2l0UHJvdmlkZXIiLCJzdGF0aWMiLCJleHBvcnRDU1YiLCJpbml0aWFsU3RhdGUiLCJjb2x1bW5Ub2dnbGUiLCJkZWZhdWx0U2VhcmNoIiwiYmluZCIsInNldERlcGVuZGVuY3lNb2R1bGVzIiwicmVkdWNlIiwib2JqIiwiaGlkZGVuIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiY3VyckNvbHVtblRvZ2dsZSIsInByb3BzQ29sdW1uVG9nZ2xlIiwicmVnaXN0ZXJFeHBvc2VkQVBJIiwic2VhcmNoQ29udGV4dCIsImhhbmRsZUV4cG9ydENTViIsImRlZmF1bHQiLCJoYW5kbGVEZWJvdW5jZSIsImZ1bmMiLCJ3YWl0IiwiaW1tZWRpYXRlIiwidGltZW91dCIsImFyZ3MiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0IiwiYXBwbHkiLCJpbnB1dCIsIm9uQ2hhbmdlVmFsdWUiLCJvbktleXVwIiwiZGVsYXkiLCJkZWJvdW5jZUNhbGxiYWNrIiwicGxhY2Vob2xkZXIiLCJ0YWJsZUlkIiwiaHRtbEZvciIsImlkIiwicmVmIiwibiIsIm9uS2V5VXAiLCJvbkNoYW5nZSIsInNyVGV4dCIsIkJhc2UiLCJ0YWJsZUV4cG9zZWRBUElFbWl0dGVyIiwiY3N2RGVmYXVsdE9wdGlvbnMiLCJleHBvcnRBbGwiLCJvbmx5RXhwb3J0U2VsZWN0aW9uIiwic291cmNlIiwib25seUV4cG9ydEZpbHRlcmVkIiwicGF5bG9hZCIsInNlbGVjdGlvbnMiLCJpbmNsdWRlcyIsInRvb2tLaXRQcm9wcyIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJjYWxsIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
package/lib/context.d.ts CHANGED
@@ -53,6 +53,11 @@ declare const ToolkitProvider_base: {
53
53
  propTypes?: any;
54
54
  };
55
55
  declare class ToolkitProvider extends ToolkitProvider_base {
56
+ static defaultProps: {
57
+ search: boolean;
58
+ exportCSV: boolean;
59
+ bootstrap4: boolean;
60
+ };
56
61
  _: any;
57
62
  state: any;
58
63
  constructor(props: TableToolkitProps);
package/lib/context.js CHANGED
@@ -2,13 +2,10 @@
2
2
 
3
3
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
4
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
6
5
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
7
6
  function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
8
7
  function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
9
8
  function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
10
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
11
- function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
12
9
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
13
10
  function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
14
11
  function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
@@ -16,6 +13,9 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
16
13
  function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
17
14
  function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
18
15
  function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
16
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
17
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
18
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
19
19
  var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
20
20
  return mod && mod.__esModule ? mod : {
21
21
  "default": mod
@@ -54,6 +54,8 @@ var ToolkitProvider = /*#__PURE__*/function (_ref) {
54
54
  var _this;
55
55
  _classCallCheck(this, ToolkitProvider);
56
56
  _this = _callSuper(this, ToolkitProvider, [props]);
57
+ _defineProperty(_this, "_", void 0);
58
+ _defineProperty(_this, "state", void 0);
57
59
  var initialState = {
58
60
  columnToggle: {},
59
61
  searchText: _typeof(props.search) === "object" ? props.search.defaultSearch || "" : ""
@@ -182,6 +184,11 @@ var ToolkitProvider = /*#__PURE__*/function (_ref) {
182
184
  }
183
185
  }]);
184
186
  }((0, statelessOp_1["default"])(react_1["default"].Component));
187
+ _defineProperty(ToolkitProvider, "defaultProps", {
188
+ search: false,
189
+ exportCSV: false,
190
+ bootstrap4: false
191
+ });
185
192
  exports["default"] = {
186
193
  Provider: ToolkitProvider,
187
194
  Consumer: ToolkitContext.Consumer
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["context.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["context.tsx"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -32,6 +32,11 @@ export declare const ToolkitContext: {
32
32
  componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): void;
33
33
  UNSAFE_componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): void;
34
34
  };
35
+ defaultProps: {
36
+ search: boolean;
37
+ exportCSV: boolean;
38
+ bootstrap4: boolean;
39
+ };
35
40
  getDerivedStateFromProps(props: TableToolkitProps, state: any): any;
36
41
  contextType?: React.Context<any> | undefined;
37
42
  propTypes?: any;
package/lib/provider.d.ts CHANGED
@@ -1,10 +1,4 @@
1
- import PropTypes from "prop-types";
2
1
  import React from "react";
3
2
  import { TableToolkitProps } from ".";
4
- declare const Toolkitprovider: {
5
- (props: TableToolkitProps): React.ReactElement | null;
6
- propTypes: {
7
- children: PropTypes.Validator<(...args: any[]) => any>;
8
- };
9
- };
3
+ declare const Toolkitprovider: (props: TableToolkitProps) => React.ReactElement | null;
10
4
  export default Toolkitprovider;
package/lib/provider.js CHANGED
@@ -14,7 +14,6 @@ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
14
14
  Object.defineProperty(exports, "__esModule", {
15
15
  value: true
16
16
  });
17
- var prop_types_1 = __importDefault(require("prop-types"));
18
17
  var react_1 = __importDefault(require("react"));
19
18
  var context_1 = __importDefault(require("./context"));
20
19
  var Toolkitprovider = function Toolkitprovider(props) {
@@ -22,7 +21,4 @@ var Toolkitprovider = function Toolkitprovider(props) {
22
21
  return props.children(tookKitProps);
23
22
  }));
24
23
  };
25
- Toolkitprovider.propTypes = {
26
- children: prop_types_1["default"].func.isRequired
27
- };
28
24
  exports["default"] = Toolkitprovider;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["provider.tsx"],"names":[],"mappings":";;;;;AAAA,4DAAmC;AACnC,kDAA0B;AAG1B,wDAAuC;AAEvC,MAAM,eAAe,GAAG,CACtB,KAAwB,EACG,EAAE,CAAC,CAC9B,8BAAC,iBAAc,CAAC,QAAQ,OAAK,KAAK;IAChC,8BAAC,iBAAc,CAAC,QAAQ,QACrB,CAAC,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CACvB,CACF,CAC3B,CAAC;AAEF,eAAe,CAAC,SAAS,GAAG;IAC1B,QAAQ,EAAE,oBAAS,CAAC,IAAI,CAAC,UAAU;CACpC,CAAC;AAEF,kBAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["provider.tsx"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAG1B,wDAAuC;AAEvC,MAAM,eAAe,GAAG,CACtB,KAAwB,EACG,EAAE,CAAC,CAC9B,8BAAC,iBAAc,CAAC,QAAQ,OAAK,KAAK;IAChC,8BAAC,iBAAc,CAAC,QAAQ,QACrB,CAAC,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CACvB,CACF,CAC3B,CAAC;AAIF,kBAAe,eAAe,CAAC"}
@@ -1,16 +1,5 @@
1
- import PropTypes from "prop-types";
2
1
  import React from "react";
3
2
  declare const _default: {
4
- ToggleList: {
5
- ({ columns, onColumnToggle, toggles, btnClassName, className, contextual }: import("../..").ToggleListProps): React.ReactElement | null;
6
- propTypes: {
7
- columns: PropTypes.Validator<any[]>;
8
- toggles: PropTypes.Validator<object>;
9
- onColumnToggle: PropTypes.Validator<(...args: any[]) => any>;
10
- btnClassName: PropTypes.Requireable<string>;
11
- className: PropTypes.Requireable<string>;
12
- contextual: PropTypes.Requireable<string>;
13
- };
14
- };
3
+ ToggleList: ({ columns, onColumnToggle, toggles, btnClassName, className, contextual }: import("../..").ToggleListProps) => React.ReactElement | null;
15
4
  };
16
5
  export default _default;
@@ -1,15 +1,4 @@
1
- import PropTypes from "prop-types";
2
1
  import React from "react";
3
2
  import { ToggleListProps } from "../..";
4
- declare const ToggleList: {
5
- ({ columns, onColumnToggle, toggles, btnClassName, className, contextual }: ToggleListProps): React.ReactElement | null;
6
- propTypes: {
7
- columns: PropTypes.Validator<any[]>;
8
- toggles: PropTypes.Validator<object>;
9
- onColumnToggle: PropTypes.Validator<(...args: any[]) => any>;
10
- btnClassName: PropTypes.Requireable<string>;
11
- className: PropTypes.Requireable<string>;
12
- contextual: PropTypes.Requireable<string>;
13
- };
14
- };
3
+ declare const ToggleList: ({ columns, onColumnToggle, toggles, btnClassName, className, contextual }: ToggleListProps) => React.ReactElement | null;
15
4
  export default ToggleList;
@@ -14,7 +14,6 @@ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
14
14
  Object.defineProperty(exports, "__esModule", {
15
15
  value: true
16
16
  });
17
- var prop_types_1 = __importDefault(require("prop-types"));
18
17
  var react_1 = __importDefault(require("react"));
19
18
  var ToggleList = function ToggleList(_ref) {
20
19
  var columns = _ref.columns,
@@ -46,14 +45,6 @@ var ToggleList = function ToggleList(_ref) {
46
45
  }, column.text);
47
46
  }));
48
47
  };
49
- ToggleList.propTypes = {
50
- columns: prop_types_1["default"].array.isRequired,
51
- toggles: prop_types_1["default"].object.isRequired,
52
- onColumnToggle: prop_types_1["default"].func.isRequired,
53
- btnClassName: prop_types_1["default"].string,
54
- className: prop_types_1["default"].string,
55
- contextual: prop_types_1["default"].string
56
- };
57
48
  // ToggleList.defaultProps = {
58
49
  // btnClassName: "",
59
50
  // className: "",
@@ -1 +1 @@
1
- {"version":3,"file":"toggle-list.js","sourceRoot":"","sources":["toggle-list.tsx"],"names":[],"mappings":";;;;;AAAA,4DAAmC;AACnC,kDAA0B;AAI1B,MAAM,UAAU,GAAG,CAAC,EAClB,OAAO,EACP,cAAc,EACd,OAAO,EACP,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,EAAE,EACd,UAAU,GAAG,SAAS,EACN,EAA6B,EAAE,CAAC,CAChD,uCACE,SAAS,EAAE,8BAA8B,SAAS,EAAE,iBACxC,SAAS,IAEpB,OAAO;KACL,GAAG,CAAC,CAAC,MAAyB,EAAE,EAAE,CAAC,CAAC;IACnC,GAAG,MAAM;IACT,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;CAClC,CAAC,CAAC;KACF,GAAG,CAAC,CAAC,MAAyB,EAAE,EAAE,CAAC,CAClC,0CACE,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,MAAM,CAAC,SAAS,EACrB,SAAS,EAAE,GAAG,YAAY,YAAY,UAAU,IAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAC7B,EAAE,iBACU,QAAQ,kBACN,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAC9C,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,IAE9C,MAAM,CAAC,IAAI,CACL,CACV,CAAC,CACA,CACP,CAAC;AAEF,UAAU,CAAC,SAAS,GAAG;IACrB,OAAO,EAAE,oBAAS,CAAC,KAAK,CAAC,UAAU;IACnC,OAAO,EAAE,oBAAS,CAAC,MAAM,CAAC,UAAU;IACpC,cAAc,EAAE,oBAAS,CAAC,IAAI,CAAC,UAAU;IACzC,YAAY,EAAE,oBAAS,CAAC,MAAM;IAC9B,SAAS,EAAE,oBAAS,CAAC,MAAM;IAC3B,UAAU,EAAE,oBAAS,CAAC,MAAM;CAC7B,CAAC;AAEF,8BAA8B;AAC9B,sBAAsB;AACtB,mBAAmB;AACnB,2BAA2B;AAC3B,KAAK;AAEL,kBAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"toggle-list.js","sourceRoot":"","sources":["toggle-list.tsx"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAI1B,MAAM,UAAU,GAAG,CAAC,EAClB,OAAO,EACP,cAAc,EACd,OAAO,EACP,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,EAAE,EACd,UAAU,GAAG,SAAS,EACN,EAA6B,EAAE,CAAC,CAChD,uCACE,SAAS,EAAE,8BAA8B,SAAS,EAAE,iBACxC,SAAS,IAEpB,OAAO;KACL,GAAG,CAAC,CAAC,MAAyB,EAAE,EAAE,CAAC,CAAC;IACnC,GAAG,MAAM;IACT,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;CAClC,CAAC,CAAC;KACF,GAAG,CAAC,CAAC,MAAyB,EAAE,EAAE,CAAC,CAClC,0CACE,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,MAAM,CAAC,SAAS,EACrB,SAAS,EAAE,GAAG,YAAY,YAAY,UAAU,IAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAC7B,EAAE,iBACU,QAAQ,kBACN,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAC9C,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,IAE9C,MAAM,CAAC,IAAI,CACL,CACV,CAAC,CACA,CACP,CAAC;AAIF,8BAA8B;AAC9B,sBAAsB;AACtB,mBAAmB;AACnB,2BAA2B;AAC3B,KAAK;AAEL,kBAAe,UAAU,CAAC"}
@@ -1,13 +1,4 @@
1
- import PropTypes from "prop-types";
2
1
  import React from "react";
3
2
  import { ExportCSVButtonProps } from "../..";
4
- declare const ExportCSVButton: {
5
- (props: ExportCSVButtonProps): React.ReactElement | null;
6
- propTypes: {
7
- children: PropTypes.Validator<NonNullable<PropTypes.ReactNodeLike>>;
8
- onExport: PropTypes.Validator<(...args: any[]) => any>;
9
- className: PropTypes.Requireable<string>;
10
- style: PropTypes.Requireable<object>;
11
- };
12
- };
3
+ declare const ExportCSVButton: (props: ExportCSVButtonProps) => React.ReactElement | null;
13
4
  export default ExportCSVButton;