react-bootstrap-table-ng-toolkit 4.18.0 → 4.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/react-bootstrap-table-ng-toolkit.js +2 -2
- package/dist/react-bootstrap-table-ng-toolkit.min.js +2 -2
- package/lib/context.d.ts +1 -6
- package/lib/index.d.ts +2 -4
- package/lib/src/op/csv.d.ts +1 -6
- package/lib/src/op/index.d.ts +1 -6
- package/lib/src/search/SearchBar.js +1 -1
- package/lib/src/search/SearchBar.js.map +1 -1
- package/lib/src/search/context.d.ts +1 -3
- package/lib/statelessOp.d.ts +1 -6
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -280,6 +280,6 @@ import ToolkitProvider, { ColumnToggle } from 'react-bootstrap-table-ng-toolkit'
|
|
|
280
280
|
</ToolkitProvider>
|
|
281
281
|
```
|
|
282
282
|
|
|
283
|
-
> `columnToggleProps` props have enough information to let you custom the toggle list: [demo]([Live Demo For Export CSV](https://
|
|
283
|
+
> `columnToggleProps` props have enough information to let you custom the toggle list: [demo]([Live Demo For Export CSV](https://jeff-k-zhou.github.io/react-bootstrap-table-ng/storybook/index.html?selectedKind=Export%20CSV&selectedStory=Custom%20Column%20Toggle))
|
|
284
284
|
|
|
285
285
|
If you want to have default visibility on specified column, you can just give `true` or `false` on `column.hidden`.
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC5qcyIsIm1hcHBpbmdzIjoiQ0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxVQUNSLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxTQUFVSixHQUNRLGlCQUFaQyxRQUNkQSxRQUFzQyw2QkFBSUQsRUFBUUcsUUFBUSxVQUUxREosRUFBbUMsNkJBQUlDLEVBQVFELEVBQVksTUFDNUQsQ0FURCxDQVNHTyxLQUFPQyxHLHlLQ1RWLGtCQUNBLFlBSU1DLEVBQThCLENBQ2xDQyxVQUFXLEdBQ1hDLE1BQU8sQ0FBQyxHQUdKQyxFQUNKQyxJQUVBLE1BQU0sU0FBRUMsRUFBUSxTQUFFQyxFQUFRLFVBQUVMLEtBQWNNLEdBQVMsSUFBS1AsS0FBZ0NJLEdBRXhGLE9BQ0Usa0NBQ0VJLEtBQUssU0FDTFAsVUFBVywwQ0FBMENBLElBQ3JEUSxRQUFTLElBQU1KLE9BQ1hFLEdBRUhELElBS1BILEVBQWdCTyxVQUFZLENBQzFCSixTQUFVLFVBQVVLLEtBQUtDLFdBQ3pCUCxTQUFVLFVBQVVRLEtBQUtELFdBQ3pCWCxVQUFXLFVBQVVhLE9BQ3JCWixNQUFPLFVBQVVhLFFBR25CLFVBQWVaLEMsOEpDbENmLGtCQUNBLFlBR01hLEVBQWMsRUFDbEJDLFVBQ0FDLE9BQU8sUUFDUGpCLFlBQVksTUFFWixrQ0FBUUEsVUFBVyxtQkFBbUJBLElBQWFRLFFBQVNRLEdBQ3pEQyxHQUlMRixFQUFZTixVQUFZLENBQ3RCTyxRQUFTLFVBQVVKLEtBQUtELFdBQ3hCWCxVQUFXLFVBQVVhLE9BQ3JCSSxLQUFNLFVBQVVKLFFBUWxCLFVBQWVFLEMsK0pDekJmLGtCQUNBLFlBSU1HLEVBQWEsRUFDakJDLFVBQ0FDLGlCQUNBQyxVQUNBQyxlQUFlLEdBQ2Z0QixZQUFZLEdB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QUEwQixpQkFBZmdPLFdBQXlCLE9BQU9BLFdBQzNDLElBQ0MsT0FBT3ZILE1BQVEsSUFBSXdILFNBQVMsY0FBYixFQUNoQixDQUFFLE1BQU8zTixHQUNSLEdBQXNCLGlCQUFYTSxPQUFxQixPQUFPQSxNQUN4QyxDQUNBLENBUHVCLEdDR0UrTSxFQUFvQixJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY3N2L2J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9jbGVhci1idXR0b24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jb2x1bW4tdG9nZ2xlL3RvZ2dsZS1saXN0LnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmlsZS1zYXZlci9kaXN0L0ZpbGVTYXZlci5taW4uanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2Nzdi9pbmRleC50cyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2Nzdi9leHBvcnRlci50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvb3AvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvc2VhcmNoL2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jb2x1bW4tdG9nZ2xlL2luZGV4LnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L2luZGV4LnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvc2VhcmNoL1NlYXJjaEJhci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3RhdGVsZXNzT3AudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL29wL2Nzdi50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9wcm92aWRlci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1Rvb2xraXRcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RCb290c3RyYXBUYWJsZU5nVG9vbGtpdFwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRXhwb3J0Q1NWQnV0dG9uUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgZXhwb3J0Q1NWQnV0dG9uRGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IFwiXCIsXG4gIHN0eWxlOiB7fSxcbn07XG5cbmNvbnN0IEV4cG9ydENTVkJ1dHRvbiA9IChcbiAgcHJvcHM6IEV4cG9ydENTVkJ1dHRvblByb3BzXG4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsID0+IHtcbiAgY29uc3QgeyBvbkV4cG9ydCwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgLi4ucmVzdCB9ID0geyAuLi5leHBvcnRDU1ZCdXR0b25EZWZhdWx0UHJvcHMsIC4uLnByb3BzIH07XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17YHJlYWN0LWJzLXRhYmxlLWNzdi1idG4gYnRuIGJ0bi1kZWZhdWx0ICR7Y2xhc3NOYW1lfWB9XG4gICAgICBvbkNsaWNrPXsoKSA9PiBvbkV4cG9ydCgpfVxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcblxuRXhwb3J0Q1NWQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIG9uRXhwb3J0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRXhwb3J0Q1NWQnV0dG9uO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ2xlYXJTZWFyY2hCdXR0b25Qcm9wcyB9IGZyb20gXCIuLi8uLlwiO1xuXG5jb25zdCBDbGVhckJ1dHRvbiA9ICh7XG4gIG9uQ2xlYXIsXG4gIHRleHQgPSBcIkNsZWFyXCIsXG4gIGNsYXNzTmFtZSA9IFwiXCIsXG59OiBDbGVhclNlYXJjaEJ1dHRvblByb3BzKTogUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbCA9PiAoXG4gIDxidXR0b24gY2xhc3NOYW1lPXtgYnRuIGJ0bi1kZWZhdWx0ICR7Y2xhc3NOYW1lfWB9IG9uQ2xpY2s9e29uQ2xlYXJ9PlxuICAgIHt0ZXh0fVxuICA8L2J1dHRvbj5cbik7XG5cbkNsZWFyQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuLy8gQ2xlYXJCdXR0b24uZGVmYXVsdFByb3BzID0ge1xuLy8gICB0ZXh0OiBcIkNsZWFyXCIsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IENsZWFyQnV0dG9uO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ29sdW1uRGVzY3JpcHRpb24gfSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nXCI7XG5pbXBvcnQgeyBUb2dnbGVMaXN0UHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgVG9nZ2xlTGlzdCA9ICh7XG4gIGNvbHVtbnMsXG4gIG9uQ29sdW1uVG9nZ2xlLFxuICB0b2dnbGVzLFxuICBidG5DbGFzc05hbWUgPSBcIlwiLFxuICBjbGFzc05hbWUgPSBcIlwiLFxuICBjb250ZXh0dWFsID0gXCJwcmltYXJ5XCJcbn06IFRvZ2dsZUxpc3RQcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGwgPT4gKFxuICA8ZGl2XG4gICAgY2xhc3NOYW1lPXtgYnRuLWdyb3VwIGJ0bi1ncm91cC10b2dnbGUgJHtjbGFzc05hbWV9YH1cbiAgICBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIlxuICA+XG4gICAge2NvbHVtbnNcbiAgICAgIC5tYXAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb24pID0+ICh7XG4gICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgdG9nZ2xlOiB0b2dnbGVzW2NvbHVtbi5kYXRhRmllbGRdLFxuICAgICAgfSkpXG4gICAgICAubWFwKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uKSA9PiAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBrZXk9e2NvbHVtbi5kYXRhRmllbGR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtidG5DbGFzc05hbWV9IGJ0biBidG4tJHtjb250ZXh0dWFsfSAke1xuICAgICAgICAgICAgY29sdW1uLnRvZ2dsZSA/IFwiYWN0aXZlXCIgOiBcIlwiXG4gICAgICAgICAgfWB9XG4gICAgICAgICAgZGF0YS10b2dnbGU9XCJidXR0b25cIlxuICAgICAgICAgIGFyaWEtcHJlc3NlZD17Y29sdW1uLnRvZ2dsZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ29sdW1uVG9nZ2xlKGNvbHVtbi5kYXRhRmllbGQpfVxuICAgICAgICA+XG4gICAgICAgICAge2NvbHVtbi50ZXh0fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICkpfVxuICA8L2Rpdj5cbik7XG5cblRvZ2dsZUxpc3QucHJvcFR5cGVzID0ge1xuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgdG9nZ2xlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBvbkNvbHVtblRvZ2dsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYnRuQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbnRleHR1YWw6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG4vLyBUb2dnbGVMaXN0LmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgYnRuQ2xhc3NOYW1lOiBcIlwiLFxuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIGNvbnRleHR1YWw6IFwicHJpbWFyeVwiLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgVG9nZ2xlTGlzdDtcbiIsIihmdW5jdGlvbihhLGIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYik7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgZXhwb3J0cyliKCk7ZWxzZXtiKCksYS5GaWxlU2F2ZXI9e2V4cG9ydHM6e319LmV4cG9ydHN9fSkodGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSxiKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgYj9iPXthdXRvQm9tOiExfTpcIm9iamVjdFwiIT10eXBlb2YgYiYmKGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQ6IEV4cGVjdGVkIHRoaXJkIGFyZ3VtZW50IHRvIGJlIGEgb2JqZWN0XCIpLGI9e2F1dG9Cb206IWJ9KSxiLmF1dG9Cb20mJi9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGEudHlwZSk/bmV3IEJsb2IoW1wiXFx1RkVGRlwiLGFdLHt0eXBlOmEudHlwZX0pOmF9ZnVuY3Rpb24gYyhhLGIsYyl7dmFyIGQ9bmV3IFhNTEh0dHBSZXF1ZXN0O2Qub3BlbihcIkdFVFwiLGEpLGQucmVzcG9uc2VUeXBlPVwiYmxvYlwiLGQub25sb2FkPWZ1bmN0aW9uKCl7ZyhkLnJlc3BvbnNlLGIsYyl9LGQub25lcnJvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJjb3VsZCBub3QgZG93bmxvYWQgZmlsZVwiKX0sZC5zZW5kKCl9ZnVuY3Rpb24gZChhKXt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiSEVBRFwiLGEsITEpO3RyeXtiLnNlbmQoKX1jYXRjaChhKXt9cmV0dXJuIDIwMDw9Yi5zdGF0dXMmJjI5OT49Yi5zdGF0dXN9ZnVuY3Rpb24gZShhKXt0cnl7YS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIikpfWNhdGNoKGMpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudHNcIik7Yi5pbml0TW91c2VFdmVudChcImNsaWNrXCIsITAsITAsd2luZG93LDAsMCwwLDgwLDIwLCExLCExLCExLCExLDAsbnVsbCksYS5kaXNwYXRjaEV2ZW50KGIpfX12YXIgZj1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cud2luZG93PT09d2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZi5zZWxmPT09c2VsZj9zZWxmOlwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbC5nbG9iYWw9PT1nbG9iYWw/Z2xvYmFsOnZvaWQgMCxhPWYubmF2aWdhdG9yJiYvTWFjaW50b3NoLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGc9Zi5zYXZlQXN8fChcIm9iamVjdFwiIT10eXBlb2Ygd2luZG93fHx3aW5kb3chPT1mP2Z1bmN0aW9uKCl7fTpcImRvd25sb2FkXCJpbiBIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUmJiFhP2Z1bmN0aW9uKGIsZyxoKXt2YXIgaT1mLlVSTHx8Zi53ZWJraXRVUkwsaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtnPWd8fGIubmFtZXx8XCJkb3dubG9hZFwiLGouZG93bmxvYWQ9ZyxqLnJlbD1cIm5vb3BlbmVyXCIsXCJzdHJpbmdcIj09dHlwZW9mIGI/KGouaHJlZj1iLGoub3JpZ2luPT09bG9jYXRpb24ub3JpZ2luP2Uoaik6ZChqLmhyZWYpP2MoYixnLGgpOmUoaixqLnRhcmdldD1cIl9ibGFua1wiKSk6KGouaHJlZj1pLmNyZWF0ZU9iamVjdFVSTChiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5yZXZva2VPYmplY3RVUkwoai5ocmVmKX0sNEU0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShqKX0sMCkpfTpcIm1zU2F2ZU9yT3BlbkJsb2JcImluIG5hdmlnYXRvcj9mdW5jdGlvbihmLGcsaCl7aWYoZz1nfHxmLm5hbWV8fFwiZG93bmxvYWRcIixcInN0cmluZ1wiIT10eXBlb2YgZiluYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihiKGYsaCksZyk7ZWxzZSBpZihkKGYpKWMoZixnLGgpO2Vsc2V7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7aS5ocmVmPWYsaS50YXJnZXQ9XCJfYmxhbmtcIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShpKX0pfX06ZnVuY3Rpb24oYixkLGUsZyl7aWYoZz1nfHxvcGVuKFwiXCIsXCJfYmxhbmtcIiksZyYmKGcuZG9jdW1lbnQudGl0bGU9Zy5kb2N1bWVudC5ib2R5LmlubmVyVGV4dD1cImRvd25sb2FkaW5nLi4uXCIpLFwic3RyaW5nXCI9PXR5cGVvZiBiKXJldHVybiBjKGIsZCxlKTt2YXIgaD1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiPT09Yi50eXBlLGk9L2NvbnN0cnVjdG9yL2kudGVzdChmLkhUTUxFbGVtZW50KXx8Zi5zYWZhcmksaj0vQ3JpT1NcXC9bXFxkXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7aWYoKGp8fGgmJml8fGEpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgRmlsZVJlYWRlcil7dmFyIGs9bmV3IEZpbGVSZWFkZXI7ay5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXt2YXIgYT1rLnJlc3VsdDthPWo/YTphLnJlcGxhY2UoL15kYXRhOlteO10qOy8sXCJkYXRhOmF0dGFjaG1lbnQvZmlsZTtcIiksZz9nLmxvY2F0aW9uLmhyZWY9YTpsb2NhdGlvbj1hLGc9bnVsbH0say5yZWFkQXNEYXRhVVJMKGIpfWVsc2V7dmFyIGw9Zi5VUkx8fGYud2Via2l0VVJMLG09bC5jcmVhdGVPYmplY3RVUkwoYik7Zz9nLmxvY2F0aW9uPW06bG9jYXRpb24uaHJlZj1tLGc9bnVsbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bC5yZXZva2VPYmplY3RVUkwobSl9LDRFNCl9fSk7Zi5zYXZlQXM9Zy5zYXZlQXM9ZyxcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9Zyl9KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RmlsZVNhdmVyLm1pbi5qcy5tYXAiLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBFeHBvcnRDU1ZCdXR0b24gZnJvbSAnLi9idXR0b24nO1xuXG5leHBvcnQgZGVmYXVsdCB7IEV4cG9ydENTVkJ1dHRvbiB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCIvKiBlc2xpbnQgbm8tdW5uZWVkZWQtdGVybmFyeTogMCAqL1xuaW1wb3J0IEZpbGVTYXZlciBmcm9tIFwiZmlsZS1zYXZlclwiO1xuXG5leHBvcnQgY29uc3QgZ2V0TWV0YUluZm8gPSAoY29sdW1uczogYW55KSA9PlxuICBjb2x1bW5zXG4gICAgLm1hcCgoY29sdW1uOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZDogY29sdW1uLmRhdGFGaWVsZCxcbiAgICAgIHR5cGU6IGNvbHVtbi5jc3ZUeXBlIHx8IFN0cmluZyxcbiAgICAgIGZvcm1hdHRlcjogY29sdW1uLmNzdkZvcm1hdHRlcixcbiAgICAgIGZvcm1hdEV4dHJhRGF0YTogY29sdW1uLmZvcm1hdEV4dHJhRGF0YSxcbiAgICAgIGhlYWRlcjogY29sdW1uLmNzdlRleHQgfHwgY29sdW1uLnRleHQsXG4gICAgICBleHBvcnQ6IGNvbHVtbi5jc3ZFeHBvcnQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxuICAgICAgcm93OiBOdW1iZXIoY29sdW1uLnJvdykgfHwgMCxcbiAgICAgIHJvd1NwYW46IE51bWJlcihjb2x1bW4ucm93U3BhbikgfHwgMSxcbiAgICAgIGNvbFNwYW46IE51bWJlcihjb2x1bW4uY29sU3BhbikgfHwgMSxcbiAgICAgIGZvb3RlcjogY29sdW1uLmZvb3RlcixcbiAgICAgIGZvb3RlckZvcm1hdHRlcjogY29sdW1uLmZvb3RlckZvcm1hdHRlcixcbiAgICB9KSlcbiAgICAuZmlsdGVyKChfOiBhbnkpID0+IF8uZXhwb3J0KTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybSA9IChcbiAgZGF0YTogYW55LFxuICBtZXRhOiBhbnksXG4gIGNvbHVtbnM6IGFueSxcbiAgXzogYW55LFxuICB7IHNlcGFyYXRvciwgaWdub3JlSGVhZGVyLCBpZ25vcmVGb290ZXIgfTogYW55XG4pID0+IHtcbiAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBtZXRhLmZpbHRlcigobTogYW55KSA9PiBtLmV4cG9ydCk7XG4gIGxldCBjb250ZW50ID0gXCJcIjtcbiAgLy8gZXh0cmFjdCBjc3YgaGVhZGVyXG4gIGlmICghaWdub3JlSGVhZGVyKSB7XG4gICAgY29udGVudCArPSB2aXNpYmxlQ29sdW1ucy5tYXAoKG06IGFueSkgPT4gYFwiJHttLmhlYWRlcn1cImApLmpvaW4oc2VwYXJhdG9yKTtcbiAgICBjb250ZW50ICs9IFwiXFxuXCI7XG4gIH1cbiAgLy8gZXh0cmFjdCBjc3YgYm9keVxuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBjb250ZW50O1xuICBjb250ZW50ICs9IGRhdGFcbiAgICAubWFwKChyb3c6IGFueSwgcm93SW5kZXg6IGFueSkgPT5cbiAgICAgIHZpc2libGVDb2x1bW5zXG4gICAgICAgIC5tYXAoKG06IGFueSkgPT4ge1xuICAgICAgICAgIGxldCBjZWxsQ29udGVudCA9IF8uZ2V0KHJvdywgbS5maWVsZCk7XG4gICAgICAgICAgaWYgKG0uZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBjZWxsQ29udGVudCA9IG0uZm9ybWF0dGVyKFxuICAgICAgICAgICAgICBjZWxsQ29udGVudCxcbiAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgbS5mb3JtYXRFeHRyYURhdGFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtLnR5cGUgPT09IFN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGBcIiR7YCR7Y2VsbENvbnRlbnR9YC5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNlbGxDb250ZW50O1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihzZXBhcmF0b3IpXG4gICAgKVxuICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gIGlmICghaWdub3JlRm9vdGVyKSB7XG4gICAgY29udGVudCArPSBcIlxcblwiO1xuICAgIGNvbnRlbnQgKz0gdmlzaWJsZUNvbHVtbnNcbiAgICAgIC5tYXAoKG06IGFueSwgaTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgbS5mb290ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBfLnBsdWNrKGRhdGEsIGNvbHVtbnNbaV0uZGF0YUZpZWxkKTtcbiAgICAgICAgICByZXR1cm4gYFwiJHttLmZvb3Rlcihjb2x1bW5EYXRhLCBjb2x1bW5zW2ldLCBpKX1cImA7XG4gICAgICAgIH0gZWxzZSBpZiAobS5mb290ZXJGb3JtYXR0ZXIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHttLmZvb3RlckZvcm1hdHRlcihjb2x1bW5zW2ldLCBpKX1cImA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcIiR7bS5mb290ZXJ9XCJgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKHNlcGFyYXRvcik7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2F2ZSA9IChjb250ZW50OiBhbnksIHsgbm9BdXRvQk9NLCBmaWxlTmFtZSwgYmxvYlR5cGUgfTogYW55KSA9PiB7XG4gIEZpbGVTYXZlci5zYXZlQXMoXG4gICAgbmV3IEJsb2IoW2NvbnRlbnRdLCB7IHR5cGU6IGJsb2JUeXBlIH0pLFxuICAgIGZpbGVOYW1lLFxuICAgIG5vQXV0b0JPTVxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNzdk9wZXJhdGlvbiBmcm9tICcuL2Nzdic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3N2T3BlcmF0aW9uXG59O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgU2VhcmNoQmFyIGZyb20gJy4vU2VhcmNoQmFyJztcbmltcG9ydCBDbGVhclNlYXJjaEJ1dHRvbiBmcm9tICcuL2NsZWFyLWJ1dHRvbic7XG5cbmV4cG9ydCBkZWZhdWx0IHsgU2VhcmNoQmFyLCBDbGVhclNlYXJjaEJ1dHRvbiB9O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1jb250aW51ZTogMCAqL1xuLyogZXNsaW50IG5vLWxvbmVseS1pZjogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNlYXJjaE1hdGNoUHJvcHMsIFRhYmxlU2VhcmNoUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuaW50ZXJmYWNlIERhdGFDaGFuZ2VMaXN0ZW5lciB7XG4gIGVtaXQ6IChldmVudDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUHJvdmlkZXJQcm9wcyBleHRlbmRzIFNlYXJjaE1hdGNoUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgZGF0YUNoYW5nZUxpc3RlbmVyPzogRGF0YUNoYW5nZUxpc3RlbmVyO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUHJvdmlkZXJTdGF0ZSB7XG4gIGRhdGE6IGFueVtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoXG4gICAgb3B0aW9uczogVGFibGVTZWFyY2hQcm9wcyA9IHtcbiAgICAgIHNlYXJjaEZvcm1hdHRlZDogZmFsc2UsXG4gICAgICBhZnRlclNlYXJjaDogdW5kZWZpbmVkLFxuICAgICAgb25Db2x1bW5NYXRjaDogKCkgPT4gZmFsc2UsXG4gICAgfVxuICApID0+XG4gIChcbiAgICBfOiBhbnksXG4gICAgaXNSZW1vdGVTZWFyY2g6ICgpID0+IGJvb2xlYW4sXG4gICAgaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlOiAoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB2b2lkXG4gICkgPT4ge1xuICAgIGNvbnN0IFNlYXJjaENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PGFueT4obnVsbCk7XG5cbiAgICBjbGFzcyBTZWFyY2hQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgICAgIFNlYXJjaFByb3ZpZGVyUHJvcHMsXG4gICAgICBTZWFyY2hQcm92aWRlclN0YXRlXG4gICAgPiB7XG4gICAgICBjb25zdHJ1Y3Rvcihwcm9wczogU2VhcmNoUHJvdmlkZXJQcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIGxldCBpbml0aWFsRGF0YSA9IHByb3BzLmRhdGE7XG4gICAgICAgIGlmIChpc1JlbW90ZVNlYXJjaCgpICYmIHRoaXMucHJvcHMuc2VhcmNoVGV4dCAhPT0gXCJcIikge1xuICAgICAgICAgIGhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSh0aGlzLnByb3BzLnNlYXJjaFRleHQhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbml0aWFsRGF0YSA9IHRoaXMuc2VhcmNoKHByb3BzKTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMaXN0ZW5lcihpbml0aWFsRGF0YSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgZGF0YTogaW5pdGlhbERhdGEgfTtcbiAgICAgIH1cblxuICAgICAgZ2V0U2VhcmNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIHRyaWdnZXJMaXN0ZW5lcihyZXN1bHQ6IGFueSwgc2tpcEluaXQ/OiBhbnkpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJTZWFyY2ggJiYgIXNraXBJbml0KSB7XG4gICAgICAgICAgb3B0aW9ucy5hZnRlclNlYXJjaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lcikge1xuICAgICAgICAgIHRoaXMucHJvcHMuZGF0YUNoYW5nZUxpc3RlbmVyLmVtaXQoXCJmaWx0ZXJDaGFuZ2VkXCIsIHJlc3VsdC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFNlYXJjaFByb3ZpZGVyUHJvcHMpIHtcbiAgICAgICAgaWYgKHByZXZQcm9wcy5zZWFyY2hUZXh0ICE9PSB0aGlzLnByb3BzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgICBpZiAoaXNSZW1vdGVTZWFyY2goKSkge1xuICAgICAgICAgICAgaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlKHRoaXMucHJvcHMuc2VhcmNoVGV4dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoKHRoaXMucHJvcHMpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTGlzdGVuZXIocmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzUmVtb3RlU2VhcmNoKCkpIHtcbiAgICAgICAgICAgIGlmICghXy5pc0VxdWFsKHRoaXMuc3RhdGUuZGF0YSwgdGhpcy5wcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGF0YTogdGhpcy5wcm9wcy5kYXRhIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIV8uaXNFcXVhbChwcmV2UHJvcHMuZGF0YSwgdGhpcy5wcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWFyY2godGhpcy5wcm9wcyk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMaXN0ZW5lcihyZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZWFyY2gocHJvcHM6IGFueSkge1xuICAgICAgICBjb25zdCB7IGRhdGEsIGNvbHVtbnMgfSA9IHByb3BzO1xuICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gcHJvcHMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55LCByaWR4OiBhbnkpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBjaWR4ID0gMDsgY2lkeCA8IGNvbHVtbnMubGVuZ3RoOyBjaWR4ICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY2lkeF07XG4gICAgICAgICAgICBpZiAoY29sdW1uLnNlYXJjaGFibGUgPT09IGZhbHNlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCB0YXJnZXRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBvcHRpb25zLnNlYXJjaEZvcm1hdHRlZCkge1xuICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA9IGNvbHVtbi5mb3JtYXR0ZXIoXG4gICAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUsXG4gICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgIHJpZHgsXG4gICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdEV4dHJhRGF0YVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZmlsdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUgPSBjb2x1bW4uZmlsdGVyVmFsdWUodGFyZ2V0VmFsdWUsIHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5vbkNvbHVtbk1hdGNoKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uQ29sdW1uTWF0Y2goe1xuICAgICAgICAgICAgICAgICAgc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB0YXJnZXRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRhcmdldFZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB0YXJnZXRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlID0gdGFyZ2V0VmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRWYWx1ZS5pbmRleE9mKHNlYXJjaFRleHQpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFNlYXJjaENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgZGF0YTogdGhpcy5zdGF0ZS5kYXRhIH19PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgPC9TZWFyY2hDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm92aWRlcjogU2VhcmNoUHJvdmlkZXIsXG4gICAgICBDb25zdW1lcjogU2VhcmNoQ29udGV4dC5Db25zdW1lcixcbiAgICB9O1xuICB9O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgVG9nZ2xlTGlzdCBmcm9tICcuL3RvZ2dsZS1saXN0JztcblxuZXhwb3J0IGRlZmF1bHQgeyBUb2dnbGVMaXN0IH07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgVGFibGVUb29sa2l0UHJvcHMsIFRvb2xraXRDb250ZXh0VHlwZSB9IGZyb20gXCIuXCI7XG5pbXBvcnQgY3JlYXRlU2VhcmNoQ29udGV4dCBmcm9tIFwiLi9zcmMvc2VhcmNoL2NvbnRleHRcIjtcbmltcG9ydCBzdGF0ZWxlc3NEZWNvcmF0b3IgZnJvbSBcIi4vc3RhdGVsZXNzT3BcIjtcblxuY29uc3QgVG9vbGtpdENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFRvb2xraXRDb250ZXh0VHlwZT4oe1xuICBzZWFyY2hQcm9wczoge1xuICAgIHNlYXJjaFRleHQ6IFwiXCIsXG4gICAgb25TZWFyY2g6ICh2YWw6IHN0cmluZykgPT4ge30sXG4gICAgb25DbGVhcjogKCkgPT4ge30sXG4gIH0sXG4gIGNzdlByb3BzOiB7XG4gICAgb25FeHBvcnQ6ICgpID0+IHt9LFxuICB9LFxuICBjb2x1bW5Ub2dnbGVQcm9wczoge1xuICAgIGNvbHVtbnM6IFtdLFxuICAgIHRvZ2dsZXM6IFtdLFxuICAgIG9uQ29sdW1uVG9nZ2xlOiAoZGF0YUZpZWxkOiBzdHJpbmcpID0+IHt9LFxuICB9LFxuICBiYXNlUHJvcHM6IHtcbiAgICBrZXlGaWVsZDogdW5kZWZpbmVkLFxuICAgIGNvbHVtbnM6IFtdLFxuICAgIGRhdGE6IFtdLFxuICAgIGJvb3RzdHJhcDQ6IHVuZGVmaW5lZCxcbiAgfSxcbn0pO1xuXG5jbGFzcyBUb29sa2l0UHJvdmlkZXIgZXh0ZW5kcyBzdGF0ZWxlc3NEZWNvcmF0b3IoUmVhY3QuQ29tcG9uZW50KSB7XG4gIC8vIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gIC8vICAga2V5RmllbGQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLy8gICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgLy8gICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgLy8gICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLy8gICBib290c3RyYXA0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICBzZWFyY2g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAvLyAgICAgUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAvLyAgICAgICBkZWZhdWx0U2VhcmNoOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvLyAgICAgICBzZWFyY2hGb3JtYXR0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgfSksXG4gIC8vICAgXSksXG4gIC8vICAgZXhwb3J0Q1NWOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgLy8gICAgIFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgLy8gICAgICAgZmlsZU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8vICAgICAgIHNlcGFyYXRvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLy8gICAgICAgaWdub3JlSGVhZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgICAgaWdub3JlRm9vdGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgICAgbm9BdXRvQk9NOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgICAgYmxvYlR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8vICAgICAgIGV4cG9ydEFsbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICAgIG9ubHlFeHBvcnRGaWx0ZXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICAgIG9ubHlFeHBvcnRTZWxlY3Rpb246IFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgfSksXG4gIC8vICAgXSksXG4gIC8vIH07XG5cbiAgLy8gc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgLy8gICBzZWFyY2g6IGZhbHNlLFxuICAvLyAgIGV4cG9ydENTVjogZmFsc2UsXG4gIC8vICAgYm9vdHN0cmFwNDogZmFsc2UsXG4gIC8vIH07XG5cbiAgXzogYW55O1xuICBzdGF0ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBUYWJsZVRvb2xraXRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBjb2x1bW5Ub2dnbGU6IHt9LFxuICAgICAgc2VhcmNoVGV4dDpcbiAgICAgICAgdHlwZW9mIHByb3BzLnNlYXJjaCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgID8gcHJvcHMuc2VhcmNoLmRlZmF1bHRTZWFyY2ggfHwgXCJcIlxuICAgICAgICAgIDogXCJcIixcbiAgICB9O1xuICAgIHRoaXMuXyA9IG51bGw7XG4gICAgdGhpcy5vbkNsZWFyID0gdGhpcy5vbkNsZWFyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vblNlYXJjaCA9IHRoaXMub25TZWFyY2guYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uQ29sdW1uVG9nZ2xlID0gdGhpcy5vbkNvbHVtblRvZ2dsZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2V0RGVwZW5kZW5jeU1vZHVsZXMgPSB0aGlzLnNldERlcGVuZGVuY3lNb2R1bGVzLmJpbmQodGhpcyk7XG5cbiAgICBpZiAocHJvcHMuY29sdW1uVG9nZ2xlKSB7XG4gICAgICBpbml0aWFsU3RhdGUuY29sdW1uVG9nZ2xlID0gcHJvcHMuY29sdW1ucy5yZWR1Y2UoXG4gICAgICAgIChvYmo6IGFueSwgY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgICBvYmpbY29sdW1uLmRhdGFGaWVsZF0gPSAhY29sdW1uLmhpZGRlbjtcbiAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgICB9XG4gICAgaW5pdGlhbFN0YXRlLnNlYXJjaFRleHQgPVxuICAgICAgdHlwZW9mIHByb3BzLnNlYXJjaCA9PT0gXCJvYmplY3RcIiA/IHByb3BzLnNlYXJjaC5kZWZhdWx0U2VhcmNoIHx8IFwiXCIgOiBcIlwiO1xuICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzOiBUYWJsZVRvb2xraXRQcm9wcywgc3RhdGU6IGFueSkge1xuICAgIGNvbnN0IGN1cnJDb2x1bW5Ub2dnbGUgPSBzdGF0ZS5jb2x1bW5Ub2dnbGU7XG4gICAgbGV0IHByb3BzQ29sdW1uVG9nZ2xlO1xuICAgIGlmIChwcm9wcy5jb2x1bW5Ub2dnbGUpIHtcbiAgICAgIHByb3BzQ29sdW1uVG9nZ2xlID0gcHJvcHMuY29sdW1ucy5yZWR1Y2UoKG9iajogYW55LCBjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBvYmpbY29sdW1uLmRhdGFGaWVsZF0gPSAhY29sdW1uLmhpZGRlbjtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0sIHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcHNDb2x1bW5Ub2dnbGUgPSB7fTtcbiAgICB9XG4gICAgaWYgKGN1cnJDb2x1bW5Ub2dnbGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjdXJyQ29sdW1uVG9nZ2xlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHByb3BzQ29sdW1uVG9nZ2xlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaChzZWFyY2hUZXh0OiBhbnkpIHtcbiAgICBpZiAoc2VhcmNoVGV4dCAhPT0gdGhpcy5zdGF0ZS5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgc2VhcmNoVGV4dCB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNsZWFyKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2hUZXh0OiBcIlwiIH0pO1xuICB9XG5cbiAgb25Db2x1bW5Ub2dnbGUoZGF0YUZpZWxkOiBhbnkpIHtcbiAgICBjb25zdCB7IGNvbHVtblRvZ2dsZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb2x1bW5Ub2dnbGVbZGF0YUZpZWxkXSA9ICFjb2x1bW5Ub2dnbGVbZGF0YUZpZWxkXTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICBjb2x1bW5Ub2dnbGUsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gX1xuICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9ubHkgb25lIHRpbWUgd2hlbiB0YWJsZSByZW5kZXJcbiAgICogcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0L2luZGV4LmpzIHdpbGwgY2FsbCB0aGlzIGNiIGZvciBwYXNzaW5nIHRoZSBfIG1vZHVsZVxuICAgKiBQbGVhc2UgY29uc2lkZXIgdG8gZXh0cmFjdCBhIGNvbW1vbiBtb2R1bGUgdG8gaGFuZGxlIF8gbW9kdWxlLlxuICAgKiB0aGlzIGlzIGp1c3QgYSBxdWljayBmaXhcbiAgICovXG4gIHNldERlcGVuZGVuY3lNb2R1bGVzKF86IGFueSkge1xuICAgIHRoaXMuXyA9IF87XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgYmFzZVByb3BzOiBUYWJsZVRvb2xraXRQcm9wcyA9IHtcbiAgICAgIGtleUZpZWxkOiB0aGlzLnByb3BzLmtleUZpZWxkLFxuICAgICAgY29sdW1uczogdGhpcy5wcm9wcy5jb2x1bW5zLFxuICAgICAgZGF0YTogdGhpcy5wcm9wcy5kYXRhLFxuICAgICAgc2VhcmNoOiB0aGlzLnByb3BzLnNlYXJjaCA/PyBmYWxzZSxcbiAgICAgIGV4cG9ydENTVjogdGhpcy5wcm9wcy5leHBvcnRDU1YgPz8gZmFsc2UsXG4gICAgICBib290c3RyYXA0OiB0aGlzLnByb3BzLmJvb3RzdHJhcDQgPz8gZmFsc2UsXG4gICAgICBjaGlsZHJlbjogdGhpcy5wcm9wcy5jaGlsZHJlbixcbiAgICAgIHNldERlcGVuZGVuY3lNb2R1bGVzOiB0aGlzLnNldERlcGVuZGVuY3lNb2R1bGVzLFxuICAgICAgcmVnaXN0ZXJFeHBvc2VkQVBJOiB0aGlzLnJlZ2lzdGVyRXhwb3NlZEFQSSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnByb3BzLnNlYXJjaCkge1xuICAgICAgYmFzZVByb3BzLnNlYXJjaCA9IHtcbiAgICAgICAgc2VhcmNoQ29udGV4dDogY3JlYXRlU2VhcmNoQ29udGV4dCh0aGlzLnByb3BzLnNlYXJjaCksXG4gICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmNvbHVtblRvZ2dsZSkge1xuICAgICAgYmFzZVByb3BzLmNvbHVtblRvZ2dsZSA9IHtcbiAgICAgICAgdG9nZ2xlczogdGhpcy5zdGF0ZS5jb2x1bW5Ub2dnbGUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPFRvb2xraXRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgc2VhcmNoUHJvcHM6IHtcbiAgICAgICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIG9uU2VhcmNoOiB0aGlzLm9uU2VhcmNoLFxuICAgICAgICAgICAgb25DbGVhcjogdGhpcy5vbkNsZWFyLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY3N2UHJvcHM6IHtcbiAgICAgICAgICAgIG9uRXhwb3J0OiB0aGlzLmhhbmRsZUV4cG9ydENTVixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbHVtblRvZ2dsZVByb3BzOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLnByb3BzLmNvbHVtbnMsXG4gICAgICAgICAgICB0b2dnbGVzOiB0aGlzLnN0YXRlLmNvbHVtblRvZ2dsZSxcbiAgICAgICAgICAgIG9uQ29sdW1uVG9nZ2xlOiB0aGlzLm9uQ29sdW1uVG9nZ2xlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmFzZVByb3BzLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvVG9vbGtpdENvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFByb3ZpZGVyOiBUb29sa2l0UHJvdmlkZXIsXG4gIENvbnN1bWVyOiBUb29sa2l0Q29udGV4dC5Db25zdW1lcixcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDb2x1bW5EZXNjcmlwdGlvbiwgU2VhcmNoUHJvcHMgfSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nXCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuL2NvbnRleHRcIjtcbmltcG9ydCBUb29sa2l0UHJvdmlkZXIgZnJvbSBcIi4vcHJvdmlkZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgVG9vbGtpdFByb3ZpZGVyO1xuZXhwb3J0IGNvbnN0IFRvb2xraXRDb250ZXh0ID0gQ29udGV4dDtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2x1bW5Ub2dnbGUgfSBmcm9tIFwiLi9zcmMvY29sdW1uLXRvZ2dsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1ZFeHBvcnQgfSBmcm9tIFwiLi9zcmMvY3N2XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gXCIuL3NyYy9zZWFyY2hcIjtcblxuLyoqXG4gKiBkZWNsYXJhdGlvbiBmb3IgdGFibGUgdG9vbGtpdCBzdWIgbW9kdWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0ZWRTZWFyY2hQcm9wcyB7XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgb25TZWFyY2g6ICh2YWw6IHN0cmluZykgPT4gdm9pZDtcbiAgb25DbGVhcjogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hNYXRjaFByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IHtcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQ+O1xuICByb3c6IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTZWFyY2hQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG4gIHNlYXJjaEZvcm1hdHRlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHRTZWFyY2g/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvbkNvbHVtbk1hdGNoPzogKHByb3BzOiBTZWFyY2hNYXRjaFByb3BzPFQ+KSA9PiBib29sZWFuO1xuICBjdXN0b21NYXRjaEZ1bmM/OiAoKHByb3BzOiBTZWFyY2hNYXRjaFByb3BzPFQ+KSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZDtcbiAgYWZ0ZXJTZWFyY2g/OiAobmV3UmVzdWx0OiBUW10pID0+IHZvaWQgfCB1bmRlZmluZWQ7XG4gIHNlYXJjaENvbnRleHQ/OiBGdW5jdGlvbjtcbiAgc2VhcmNoVGV4dD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU1ZQcm9wcyB7XG4gIGZpbGVOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzZXBhcmF0b3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlnbm9yZUhlYWRlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlnbm9yZUZvb3Rlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG5vQXV0b0JPTT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBkZWZhdWx0IGlzIHRleHQvcGxhaW47Y2hhcnNldD11dGYtOFxuICAgKi9cbiAgYmxvYlR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGV4cG9ydEFsbD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG9ubHlFeHBvcnRTZWxlY3Rpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBvbmx5RXhwb3J0RmlsdGVyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlVG9vbGtpdFByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IHtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHNlYXJjaD86IFRhYmxlU2VhcmNoUHJvcHM8VD4gfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBrZXlGaWVsZDoga2V5b2YgVCB8IHN0cmluZztcbiAgZGF0YTogVFtdO1xuICByZWY/OiBhbnk7XG4gIGNvbHVtbnM6IEFycmF5PENvbHVtbkRlc2NyaXB0aW9uPFQ+PjtcbiAgY2hpbGRyZW46IChwcm9wczogVG9vbGtpdENvbnRleHRUeXBlKSA9PiBKU1guRWxlbWVudDtcbiAgZXhwb3J0Q1NWPzogYm9vbGVhbiB8IENTVlByb3BzIHwgdW5kZWZpbmVkO1xuICBjb2x1bW5Ub2dnbGU/OiB7IFtkYXRhRmllbGQ6IHN0cmluZ106IGJvb2xlYW4gfSB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHNldERlcGVuZGVuY3lNb2R1bGVzPzogRnVuY3Rpb247XG4gIHJlZ2lzdGVyRXhwb3NlZEFQST86IEZ1bmN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xraXRDb250ZXh0VHlwZSB7XG4gIHNlYXJjaFByb3BzOiBJbmplY3RlZFNlYXJjaFByb3BzO1xuICBjc3ZQcm9wczoge1xuICAgIG9uRXhwb3J0OiAoc291cmNlPzogYW55KSA9PiB2b2lkO1xuICB9O1xuICBjb2x1bW5Ub2dnbGVQcm9wczoge1xuICAgIGNvbHVtbnM6IENvbHVtbkRlc2NyaXB0aW9uW107XG4gICAgLyoqXG4gICAgICogYXJyYXkgb2YgdG9nZ2xlZCBjb2x1bW5zXG4gICAgICovXG4gICAgdG9nZ2xlczogYm9vbGVhbltdO1xuICAgIG9uQ29sdW1uVG9nZ2xlOiAoZGF0YUZpZWxkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIH07XG4gIGJhc2VQcm9wczoge1xuICAgIC8qKlxuICAgICAqIHRhYmxlIGtleSBmaWVsZFxuICAgICAqL1xuICAgIGtleUZpZWxkOiBhbnk7XG4gICAgY29sdW1uczogQ29sdW1uRGVzY3JpcHRpb25bXTtcbiAgICBkYXRhOiBhbnlbXTtcbiAgICBib290c3RyYXA0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2dnbGVMaXN0UHJvcHMge1xuICBjb2x1bW5zOiBDb2x1bW5EZXNjcmlwdGlvbltdO1xuICAvKipcbiAgICogYXJyYXkgb2YgdG9nZ2xlZCBjb2x1bW5zXG4gICAqL1xuICB0b2dnbGVzOiBib29sZWFuW107XG4gIG9uQ29sdW1uVG9nZ2xlOiAoZGF0YUZpZWxkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGJ0bkNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb250ZXh0dWFsPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydENTVkJ1dHRvblByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgb25FeHBvcnQ6ICgpID0+IHZvaWQ7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEJhclByb3BzIDxUID0gYW55PiBleHRlbmRzIFNlYXJjaFByb3BzPFQ+IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG4gIGRlbGF5PzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBzZWFyY2hUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0YWJsZUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWY/OiBSZWFjdC5SZWZPYmplY3Q8UmVhY3QuQ29tcG9uZW50PFNlYXJjaFByb3BzPFQ+Pj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYXJTZWFyY2hCdXR0b25Qcm9wcyB7XG4gIG9uQ2xlYXI/OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTZWFyY2hCYXJQcm9wcyB9IGZyb20gXCIuLi8uLlwiO1xuXG5jb25zdCBoYW5kbGVEZWJvdW5jZSA9IDxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPihcbiAgZnVuYzogVCxcbiAgd2FpdDogbnVtYmVyLFxuICBpbW1lZGlhdGU/OiBib29sZWFuXG4pID0+IHtcbiAgbGV0IHRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuXG4gIHJldHVybiAoLi4uYXJnczogUGFyYW1ldGVyczxUPikgPT4ge1xuICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgdGltZW91dCA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcblxuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblxuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IHx8IDApO1xuXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9O1xufTtcblxuaW50ZXJmYWNlIFNlYXJjaEJhclN0YXRlIHtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuY2xhc3MgU2VhcmNoQmFyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFNlYXJjaEJhclByb3BzLCBTZWFyY2hCYXJTdGF0ZT4ge1xuICBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTZWFyY2hCYXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWU6IHByb3BzLnNlYXJjaFRleHQgPz8gXCJcIixcbiAgICB9O1xuICB9XG5cbiAgb25DaGFuZ2VWYWx1ZSA9IChlOiBhbnkpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IGUudGFyZ2V0LnZhbHVlIH0pO1xuICB9O1xuXG4gIG9uS2V5dXAgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBkZWxheSA9IDI1MCwgb25TZWFyY2ggfSA9IHRoaXMucHJvcHMgYXMgYW55O1xuICAgIGNvbnN0IGRlYm91bmNlQ2FsbGJhY2sgPSBoYW5kbGVEZWJvdW5jZSgoKSA9PiB7XG4gICAgICBvblNlYXJjaCEodGhpcy5pbnB1dD8udmFsdWUgPz8gXCJcIik7XG4gICAgfSwgZGVsYXkpO1xuICAgIGRlYm91bmNlQ2FsbGJhY2soKTtcbiAgfTtcblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBTZWFyY2hCYXJQcm9wcykge1xuICAgIGlmICh0aGlzLnByb3BzLnNlYXJjaFRleHQgIT09IHByZXZQcm9wcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucHJvcHMuc2VhcmNoVGV4dCB8fCBcIlwiIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgc3R5bGUgPSB7fSxcbiAgICAgIHBsYWNlaG9sZGVyID0gXCJTZWFyY2hcIixcbiAgICAgIHRhYmxlSWQgPSBcIjBcIixcbiAgICAgIHNlYXJjaFRleHQgPSBcIlNlYXJjaCB0aGlzIHRhYmxlXCIsXG4gICAgfSA9IHRoaXMucHJvcHMgYXMgYW55O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbCBodG1sRm9yPXtgc2VhcmNoLWJhci0ke3RhYmxlSWR9YH0gY2xhc3NOYW1lPVwic2VhcmNoLWxhYmVsXCI+XG4gICAgICAgIDxzcGFuIGlkPXtgc2VhcmNoLWJhci0ke3RhYmxlSWR9LWxhYmVsYH0gY2xhc3NOYW1lPVwic3Itb25seVwiPlxuICAgICAgICAgIHtzZWFyY2hUZXh0fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHJlZj17KG4pID0+ICh0aGlzLmlucHV0ID0gbil9XG4gICAgICAgICAgaWQ9e2BzZWFyY2gtYmFyLSR7dGFibGVJZH1gfVxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBzdHlsZT17c3R5bGUgYXMgYW55fVxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT17YHNlYXJjaC1iYXItJHt0YWJsZUlkfS1sYWJlbGB9XG4gICAgICAgICAgb25LZXlVcD17KCkgPT4gdGhpcy5vbktleXVwKCl9XG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2VWYWx1ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e2Bmb3JtLWNvbnRyb2wgJHtjbGFzc05hbWV9YH1cbiAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbn1cblxuLy8gU2VhcmNoQmFyLnByb3BUeXBlcyA9IHtcbi8vICAgb25TZWFyY2g6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbi8vICAgc2VhcmNoVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgdGFibGVJZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3JUZXh0OiBQcm9wVHlwZXMuc3RyaW5nXG4vLyB9O1xuXG4vLyBTZWFyY2hCYXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBzdHlsZToge30sXG4vLyAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoJyxcbi8vICAgZGVsYXk6IDI1MCxcbi8vICAgc2VhcmNoVGV4dDogJycsXG4vLyAgIHRhYmxlSWQ6ICcwJyxcbi8vICAgc3JUZXh0OiAnU2VhcmNoIHRoaXMgdGFibGUnXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBTZWFyY2hCYXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBPcGVyYXRpb24gZnJvbSBcIi4vc3JjL29wXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChCYXNlOiBhbnkpID0+XG4gIGNsYXNzIFN0YXRlbGVzc09wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvbi5jc3ZPcGVyYXRpb24oQmFzZSkge1xuICAgIHJlZ2lzdGVyRXhwb3NlZEFQSSA9ICh0YWJsZUV4cG9zZWRBUElFbWl0dGVyOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlciA9IHRhYmxlRXhwb3NlZEFQSUVtaXR0ZXI7XG4gICAgfTtcbiAgfTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgZ2V0TWV0YUluZm8sIHNhdmUsIHRyYW5zZm9ybSB9IGZyb20gXCIuLi9jc3YvZXhwb3J0ZXJcIjtcblxuY29uc3QgY3N2RGVmYXVsdE9wdGlvbnMgPSB7XG4gIGZpbGVOYW1lOiBcInNwcmVhZHNoZWV0LmNzdlwiLFxuICBzZXBhcmF0b3I6IFwiLFwiLFxuICBpZ25vcmVIZWFkZXI6IGZhbHNlLFxuICBpZ25vcmVGb290ZXI6IHRydWUsXG4gIG5vQXV0b0JPTTogdHJ1ZSxcbiAgYmxvYlR5cGU6IFwidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04XCIsXG4gIGV4cG9ydEFsbDogdHJ1ZSxcbiAgb25seUV4cG9ydFNlbGVjdGlvbjogZmFsc2UsXG59O1xuXG5leHBvcnQgZGVmYXVsdCAoQmFzZTogYW55KSA9PlxuICBjbGFzcyBDU1ZPcGVyYXRpb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8dHlwZW9mIEJhc2U+IHtcbiAgICBfOiBhbnk7XG4gICAgdGFibGVFeHBvc2VkQVBJRW1pdHRlcjogYW55O1xuXG4gICAgaGFuZGxlRXhwb3J0Q1NWID0gKHNvdXJjZTogYW55KSA9PiB7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIGV4cG9ydENTViwga2V5RmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBtZXRhID0gZ2V0TWV0YUluZm8oY29sdW1ucyk7XG4gICAgICBjb25zdCBvcHRpb25zID1cbiAgICAgICAgZXhwb3J0Q1NWID09PSB0cnVlXG4gICAgICAgICAgPyBjc3ZEZWZhdWx0T3B0aW9uc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAuLi5jc3ZEZWZhdWx0T3B0aW9ucyxcbiAgICAgICAgICAgICAgLi4uZXhwb3J0Q1NWLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gZ2V0IGRhdGEgZm9yIGNzdiBleHBvcnRcbiAgICAgIGxldCBkYXRhOiBhbnk7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBkYXRhID0gc291cmNlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmV4cG9ydEFsbCkge1xuICAgICAgICBkYXRhID0gdGhpcy5wcm9wcy5kYXRhO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm9ubHlFeHBvcnRGaWx0ZXJlZCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiB7IHJlc3VsdDogYW55IH0gPSB7IHJlc3VsdDogdW5kZWZpbmVkIH07XG4gICAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlci5lbWl0KFwiZ2V0LmZpbHRlcmVkLnJvd3NcIiwgcGF5bG9hZCk7XG4gICAgICAgIGRhdGEgPSBwYXlsb2FkLnJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7IHJlc3VsdDogdW5kZWZpbmVkIH07XG4gICAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlci5lbWl0KFwiZ2V0LnRhYmxlLmRhdGFcIiwgcGF5bG9hZCk7XG4gICAgICAgIGRhdGEgPSBwYXlsb2FkLnJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgLy8gZmlsdGVyIGRhdGEgYnkgcm93IHNlbGVjdGlvblxuICAgICAgaWYgKG9wdGlvbnMub25seUV4cG9ydFNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0geyByZXN1bHQ6IHVuZGVmaW5lZCB9O1xuICAgICAgICB0aGlzLnRhYmxlRXhwb3NlZEFQSUVtaXR0ZXIuZW1pdChcImdldC5zZWxlY3RlZC5yb3dzXCIsIHBheWxvYWQpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25zID0gcGF5bG9hZC5yZXN1bHQgPz8gW107XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4gc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dba2V5RmllbGRdKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0cmFuc2Zvcm0oZGF0YSwgbWV0YSwgY29sdW1ucywgdGhpcy5fLCBvcHRpb25zKTtcbiAgICAgIHNhdmUoY29udGVudCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgfTtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgVGFibGVUb29sa2l0UHJvcHMgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IFRvb2xraXRDb250ZXh0IGZyb20gXCIuL2NvbnRleHRcIjtcblxuY29uc3QgVG9vbGtpdHByb3ZpZGVyID0gKFxuICBwcm9wczogVGFibGVUb29sa2l0UHJvcHNcbik6IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGwgPT4gKFxuICA8VG9vbGtpdENvbnRleHQuUHJvdmlkZXIgey4uLnByb3BzfT5cbiAgICA8VG9vbGtpdENvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHRvb2tLaXRQcm9wcykgPT4gcHJvcHMuY2hpbGRyZW4odG9va0tpdFByb3BzKX1cbiAgICA8L1Rvb2xraXRDb250ZXh0LkNvbnN1bWVyPlxuICA8L1Rvb2xraXRDb250ZXh0LlByb3ZpZGVyPlxuKTtcblxuVG9vbGtpdHByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUb29sa2l0cHJvdmlkZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2ODgpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJleHBvcnRDU1ZCdXR0b25EZWZhdWx0UHJvcHMiLCJjbGFzc05hbWUiLCJzdHlsZSIsIkV4cG9ydENTVkJ1dHRvbiIsInByb3BzIiwib25FeHBvcnQiLCJjaGlsZHJlbiIsInJlc3QiLCJ0eXBlIiwib25DbGljayIsInByb3BUeXBlcyIsIm5vZGUiLCJpc1JlcXVpcmVkIiwiZnVuYyIsInN0cmluZyIsIm9iamVjdCIsIkNsZWFyQnV0dG9uIiwib25DbGVhciIsInRleHQiLCJUb2dnbGVMaXN0IiwiY29sdW1ucyIsIm9uQ29sdW1uVG9nZ2xlIiwidG9nZ2xlcyIsImJ0bkNsYXNzTmFtZSIsImNvbnRleHR1YWwiLCJtYXAiLCJjb2x1bW4iLCJ0b2dnbGUiLCJkYXRhRmllbGQiLCJrZXkiLCJhcnJheSIsImIiLCJhIiwiYXV0b0JvbSIsImNvbnNvbGUiLCJ3YXJuIiwidGVzdCIsIkJsb2IiLCJjIiwiZCIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsIm9ubG9hZCIsImciLCJyZXNwb25zZSIsIm9uZXJyb3IiLCJlcnJvciIsInNlbmQiLCJzdGF0dXMiLCJlIiwiZGlzcGF0Y2hFdmVudCIsIk1vdXNlRXZlbnQiLCJkb2N1bWVudCIsImNyZWF0ZUV2ZW50IiwiaW5pdE1vdXNlRXZlbnQiLCJ3aW5kb3ciLCJmIiwiZ2xvYmFsIiwibmF2aWdhdG9yIiwidXNlckFnZW50Iiwic2F2ZUFzIiwiSFRNTEFuY2hvckVsZW1lbnQiLCJwcm90b3R5cGUiLCJoIiwiaSIsIlVSTCIsIndlYmtpdFVSTCIsImoiLCJjcmVhdGVFbGVtZW50IiwibmFtZSIsImRvd25sb2FkIiwicmVsIiwiaHJlZiIsIm9yaWdpbiIsImxvY2F0aW9uIiwidGFyZ2V0IiwiY3JlYXRlT2JqZWN0VVJMIiwic2V0VGltZW91dCIsInJldm9rZU9iamVjdFVSTCIsIm1zU2F2ZU9yT3BlbkJsb2IiLCJ0aXRsZSIsImJvZHkiLCJpbm5lclRleHQiLCJIVE1MRWxlbWVudCIsInNhZmFyaSIsIkZpbGVSZWFkZXIiLCJrIiwib25sb2FkZW5kIiwicmVzdWx0IiwicmVwbGFjZSIsInJlYWRBc0RhdGFVUkwiLCJsIiwibSIsImdldE1ldGFJbmZvIiwiZmllbGQiLCJjc3ZUeXBlIiwiU3RyaW5nIiwiZm9ybWF0dGVyIiwiY3N2Rm9ybWF0dGVyIiwiZm9ybWF0RXh0cmFEYXRhIiwiaGVhZGVyIiwiY3N2VGV4dCIsImV4cG9ydCIsImNzdkV4cG9ydCIsInJvdyIsIk51bWJlciIsInJvd1NwYW4iLCJjb2xTcGFuIiwiZm9vdGVyIiwiZm9vdGVyRm9ybWF0dGVyIiwiZmlsdGVyIiwiXyIsInRyYW5zZm9ybSIsImRhdGEiLCJtZXRhIiwic2VwYXJhdG9yIiwiaWdub3JlSGVhZGVyIiwiaWdub3JlRm9vdGVyIiwidmlzaWJsZUNvbHVtbnMiLCJjb250ZW50Iiwiam9pbiIsImxlbmd0aCIsInJvd0luZGV4IiwiY2VsbENvbnRlbnQiLCJnZXQiLCJjb2x1bW5EYXRhIiwicGx1Y2siLCJzYXZlIiwibm9BdXRvQk9NIiwiZmlsZU5hbWUiLCJibG9iVHlwZSIsImNzdk9wZXJhdGlvbiIsIlNlYXJjaEJhciIsIkNsZWFyU2VhcmNoQnV0dG9uIiwib3B0aW9ucyIsInNlYXJjaEZvcm1hdHRlZCIsImFmdGVyU2VhcmNoIiwidW5kZWZpbmVkIiwib25Db2x1bW5NYXRjaCIsImlzUmVtb3RlU2VhcmNoIiwiaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlIiwiU2VhcmNoQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJTZWFyY2hQcm92aWRlciIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwic3VwZXIiLCJpbml0aWFsRGF0YSIsInRoaXMiLCJzZWFyY2hUZXh0Iiwic2VhcmNoIiwidHJpZ2dlckxpc3RlbmVyIiwic3RhdGUiLCJnZXRTZWFyY2hlZCIsInNraXBJbml0IiwiZGF0YUNoYW5nZUxpc3RlbmVyIiwiZW1pdCIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInNldFN0YXRlIiwiaXNFcXVhbCIsInRvTG93ZXJDYXNlIiwicmlkeCIsImNpZHgiLCJzZWFyY2hhYmxlIiwidGFyZ2V0VmFsdWUiLCJmaWx0ZXJWYWx1ZSIsInZhbHVlIiwidG9TdHJpbmciLCJpbmRleE9mIiwicmVuZGVyIiwiUHJvdmlkZXIiLCJDb25zdW1lciIsIlRvb2xraXRDb250ZXh0Iiwic2VhcmNoUHJvcHMiLCJvblNlYXJjaCIsInZhbCIsImNzdlByb3BzIiwiY29sdW1uVG9nZ2xlUHJvcHMiLCJiYXNlUHJvcHMiLCJrZXlGaWVsZCIsImJvb3RzdHJhcDQiLCJUb29sa2l0UHJvdmlkZXIiLCJpbml0aWFsU3RhdGUiLCJjb2x1bW5Ub2dnbGUiLCJkZWZhdWx0U2VhcmNoIiwiYmluZCIsInNldERlcGVuZGVuY3lNb2R1bGVzIiwicmVkdWNlIiwib2JqIiwiaGlkZGVuIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiY3VyckNvbHVtblRvZ2dsZSIsInByb3BzQ29sdW1uVG9nZ2xlIiwiZXhwb3J0Q1NWIiwicmVnaXN0ZXJFeHBvc2VkQVBJIiwic2VhcmNoQ29udGV4dCIsImhhbmRsZUV4cG9ydENTViIsImRlZmF1bHQiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwicHJvcEZ1bGxOYW1lIiwic2VjcmV0IiwiZXJyIiwiRXJyb3IiLCJnZXRTaGltIiwiUmVhY3RQcm9wVHlwZXMiLCJiaWdpbnQiLCJib29sIiwibnVtYmVyIiwic3ltYm9sIiwiYW55IiwiYXJyYXlPZiIsImVsZW1lbnQiLCJlbGVtZW50VHlwZSIsImluc3RhbmNlT2YiLCJvYmplY3RPZiIsIm9uZU9mIiwib25lT2ZUeXBlIiwic2hhcGUiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaGFuZGxlRGVib3VuY2UiLCJ3YWl0IiwiaW1tZWRpYXRlIiwidGltZW91dCIsImFyZ3MiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0IiwiYXBwbHkiLCJpbnB1dCIsIm9uQ2hhbmdlVmFsdWUiLCJvbktleXVwIiwiZGVsYXkiLCJkZWJvdW5jZUNhbGxiYWNrIiwicGxhY2Vob2xkZXIiLCJ0YWJsZUlkIiwiaHRtbEZvciIsImlkIiwicmVmIiwibiIsIm9uS2V5VXAiLCJvbkNoYW5nZSIsIkJhc2UiLCJ0YWJsZUV4cG9zZWRBUElFbWl0dGVyIiwiY3N2RGVmYXVsdE9wdGlvbnMiLCJleHBvcnRBbGwiLCJvbmx5RXhwb3J0U2VsZWN0aW9uIiwic291cmNlIiwib25seUV4cG9ydEZpbHRlcmVkIiwicGF5bG9hZCIsInNlbGVjdGlvbnMiLCJpbmNsdWRlcyIsIlRvb2xraXRwcm92aWRlciIsInRvb2tLaXRQcm9wcyIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJjYWxsIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC5qcyIsIm1hcHBpbmdzIjoiQ0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxVQUNSLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sQ0FBQyxTQUFVSixHQUNRLGlCQUFaQyxRQUNkQSxRQUFzQyw2QkFBSUQsRUFBUUcsUUFBUSxVQUUxREosRUFBbUMsNkJBQUlDLEVBQVFELEVBQVksTUFDNUQsQ0FURCxDQVNHTyxLQUFPQyxHLHlLQ1RWLGtCQUNBLFlBSU1DLEVBQThCLENBQ2xDQyxVQUFXLEdBQ1hDLE1BQU8sQ0FBQyxHQUdKQyxFQUNKQyxJQUVBLE1BQU0sU0FBRUMsRUFBUSxTQUFFQyxFQUFRLFVBQUVMLEtBQWNNLEdBQVMsSUFBS1AsS0FBZ0NJLEdBRXhGLE9BQ0Usa0NBQ0VJLEtBQUssU0FDTFAsVUFBVywwQ0FBMENBLElBQ3JEUSxRQUFTLElBQU1KLE9BQ1hFLEdBRUhELElBS1BILEVBQWdCTyxVQUFZLENBQzFCSixTQUFVLFVBQVVLLEtBQUtDLFdBQ3pCUCxTQUFVLFVBQVVRLEtBQUtELFdBQ3pCWCxVQUFXLFVBQVVhLE9BQ3JCWixNQUFPLFVBQVVhLFFBR25CLFVBQWVaLEMsOEpDbENmLGtCQUNBLFlBR01hLEVBQWMsRUFDbEJDLFVBQ0FDLE9BQU8sUUFDUGpCLFlBQVksTUFFWixrQ0FBUUEsVUFBVyxtQkFBbUJBLElBQWFRLFFBQVNRLEdBQ3pEQyxHQUlMRixFQUFZTixVQUFZLENBQ3RCTyxRQUFTLFVBQVVKLEtBQUtELFdBQ3hCWCxVQUFXLFVBQVVhLE9BQ3JCSSxLQUFNLFVBQVVKLFFBUWxCLFVBQWVFLEMsK0pDekJmLGtCQUNBLFlBSU1HLEVBQWEsRUFDakJDLFVBQ0FDLGlCQUNBQyxVQUNBQyxlQUFlLEdBQ2Z0QixZQUFZLEdB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QUEwQixpQkFBZmdPLFdBQXlCLE9BQU9BLFdBQzNDLElBQ0MsT0FBT3ZILE1BQVEsSUFBSXdILFNBQVMsY0FBYixFQUNoQixDQUFFLE1BQU8zTixHQUNSLEdBQXNCLGlCQUFYTSxPQUFxQixPQUFPQSxNQUN4QyxDQUNBLENBUHVCLEdDR0UrTSxFQUFvQixJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY3N2L2J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9jbGVhci1idXR0b24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jb2x1bW4tdG9nZ2xlL3RvZ2dsZS1saXN0LnRzeCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmlsZS1zYXZlci9kaXN0L0ZpbGVTYXZlci5taW4uanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2Nzdi9pbmRleC50cyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2Nzdi9leHBvcnRlci50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvb3AvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvc2VhcmNoL2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jb2x1bW4tdG9nZ2xlL2luZGV4LnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L2NvbnRleHQudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L2luZGV4LnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvc2VhcmNoL1NlYXJjaEJhci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3RhdGVsZXNzT3AudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL29wL2Nzdi50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9wcm92aWRlci50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1Rvb2xraXRcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RCb290c3RyYXBUYWJsZU5nVG9vbGtpdFwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgRXhwb3J0Q1NWQnV0dG9uUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgZXhwb3J0Q1NWQnV0dG9uRGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IFwiXCIsXG4gIHN0eWxlOiB7fSxcbn07XG5cbmNvbnN0IEV4cG9ydENTVkJ1dHRvbiA9IChcbiAgcHJvcHM6IEV4cG9ydENTVkJ1dHRvblByb3BzXG4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsID0+IHtcbiAgY29uc3QgeyBvbkV4cG9ydCwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgLi4ucmVzdCB9ID0geyAuLi5leHBvcnRDU1ZCdXR0b25EZWZhdWx0UHJvcHMsIC4uLnByb3BzIH07XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17YHJlYWN0LWJzLXRhYmxlLWNzdi1idG4gYnRuIGJ0bi1kZWZhdWx0ICR7Y2xhc3NOYW1lfWB9XG4gICAgICBvbkNsaWNrPXsoKSA9PiBvbkV4cG9ydCgpfVxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApO1xufTtcblxuRXhwb3J0Q1NWQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIG9uRXhwb3J0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRXhwb3J0Q1NWQnV0dG9uO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ2xlYXJTZWFyY2hCdXR0b25Qcm9wcyB9IGZyb20gXCIuLi8uLlwiO1xuXG5jb25zdCBDbGVhckJ1dHRvbiA9ICh7XG4gIG9uQ2xlYXIsXG4gIHRleHQgPSBcIkNsZWFyXCIsXG4gIGNsYXNzTmFtZSA9IFwiXCIsXG59OiBDbGVhclNlYXJjaEJ1dHRvblByb3BzKTogUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbCA9PiAoXG4gIDxidXR0b24gY2xhc3NOYW1lPXtgYnRuIGJ0bi1kZWZhdWx0ICR7Y2xhc3NOYW1lfWB9IG9uQ2xpY2s9e29uQ2xlYXJ9PlxuICAgIHt0ZXh0fVxuICA8L2J1dHRvbj5cbik7XG5cbkNsZWFyQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuLy8gQ2xlYXJCdXR0b24uZGVmYXVsdFByb3BzID0ge1xuLy8gICB0ZXh0OiBcIkNsZWFyXCIsXG4vLyAgIGNsYXNzTmFtZTogXCJcIixcbi8vIH07XG5cbmV4cG9ydCBkZWZhdWx0IENsZWFyQnV0dG9uO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ29sdW1uRGVzY3JpcHRpb24gfSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nXCI7XG5pbXBvcnQgeyBUb2dnbGVMaXN0UHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgVG9nZ2xlTGlzdCA9ICh7XG4gIGNvbHVtbnMsXG4gIG9uQ29sdW1uVG9nZ2xlLFxuICB0b2dnbGVzLFxuICBidG5DbGFzc05hbWUgPSBcIlwiLFxuICBjbGFzc05hbWUgPSBcIlwiLFxuICBjb250ZXh0dWFsID0gXCJwcmltYXJ5XCJcbn06IFRvZ2dsZUxpc3RQcm9wcyk6IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGwgPT4gKFxuICA8ZGl2XG4gICAgY2xhc3NOYW1lPXtgYnRuLWdyb3VwIGJ0bi1ncm91cC10b2dnbGUgJHtjbGFzc05hbWV9YH1cbiAgICBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIlxuICA+XG4gICAge2NvbHVtbnNcbiAgICAgIC5tYXAoKGNvbHVtbjogQ29sdW1uRGVzY3JpcHRpb24pID0+ICh7XG4gICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgdG9nZ2xlOiB0b2dnbGVzW2NvbHVtbi5kYXRhRmllbGRdLFxuICAgICAgfSkpXG4gICAgICAubWFwKChjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uKSA9PiAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBrZXk9e2NvbHVtbi5kYXRhRmllbGR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtidG5DbGFzc05hbWV9IGJ0biBidG4tJHtjb250ZXh0dWFsfSAke1xuICAgICAgICAgICAgY29sdW1uLnRvZ2dsZSA/IFwiYWN0aXZlXCIgOiBcIlwiXG4gICAgICAgICAgfWB9XG4gICAgICAgICAgZGF0YS10b2dnbGU9XCJidXR0b25cIlxuICAgICAgICAgIGFyaWEtcHJlc3NlZD17Y29sdW1uLnRvZ2dsZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ29sdW1uVG9nZ2xlKGNvbHVtbi5kYXRhRmllbGQpfVxuICAgICAgICA+XG4gICAgICAgICAge2NvbHVtbi50ZXh0fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICkpfVxuICA8L2Rpdj5cbik7XG5cblRvZ2dsZUxpc3QucHJvcFR5cGVzID0ge1xuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgdG9nZ2xlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBvbkNvbHVtblRvZ2dsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYnRuQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbnRleHR1YWw6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG4vLyBUb2dnbGVMaXN0LmRlZmF1bHRQcm9wcyA9IHtcbi8vICAgYnRuQ2xhc3NOYW1lOiBcIlwiLFxuLy8gICBjbGFzc05hbWU6IFwiXCIsXG4vLyAgIGNvbnRleHR1YWw6IFwicHJpbWFyeVwiLFxuLy8gfTtcblxuZXhwb3J0IGRlZmF1bHQgVG9nZ2xlTGlzdDtcbiIsIihmdW5jdGlvbihhLGIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYik7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgZXhwb3J0cyliKCk7ZWxzZXtiKCksYS5GaWxlU2F2ZXI9e2V4cG9ydHM6e319LmV4cG9ydHN9fSkodGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSxiKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgYj9iPXthdXRvQm9tOiExfTpcIm9iamVjdFwiIT10eXBlb2YgYiYmKGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQ6IEV4cGVjdGVkIHRoaXJkIGFyZ3VtZW50IHRvIGJlIGEgb2JqZWN0XCIpLGI9e2F1dG9Cb206IWJ9KSxiLmF1dG9Cb20mJi9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGEudHlwZSk/bmV3IEJsb2IoW1wiXFx1RkVGRlwiLGFdLHt0eXBlOmEudHlwZX0pOmF9ZnVuY3Rpb24gYyhhLGIsYyl7dmFyIGQ9bmV3IFhNTEh0dHBSZXF1ZXN0O2Qub3BlbihcIkdFVFwiLGEpLGQucmVzcG9uc2VUeXBlPVwiYmxvYlwiLGQub25sb2FkPWZ1bmN0aW9uKCl7ZyhkLnJlc3BvbnNlLGIsYyl9LGQub25lcnJvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJjb3VsZCBub3QgZG93bmxvYWQgZmlsZVwiKX0sZC5zZW5kKCl9ZnVuY3Rpb24gZChhKXt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiSEVBRFwiLGEsITEpO3RyeXtiLnNlbmQoKX1jYXRjaChhKXt9cmV0dXJuIDIwMDw9Yi5zdGF0dXMmJjI5OT49Yi5zdGF0dXN9ZnVuY3Rpb24gZShhKXt0cnl7YS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIikpfWNhdGNoKGMpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudHNcIik7Yi5pbml0TW91c2VFdmVudChcImNsaWNrXCIsITAsITAsd2luZG93LDAsMCwwLDgwLDIwLCExLCExLCExLCExLDAsbnVsbCksYS5kaXNwYXRjaEV2ZW50KGIpfX12YXIgZj1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cud2luZG93PT09d2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZi5zZWxmPT09c2VsZj9zZWxmOlwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbC5nbG9iYWw9PT1nbG9iYWw/Z2xvYmFsOnZvaWQgMCxhPWYubmF2aWdhdG9yJiYvTWFjaW50b3NoLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGc9Zi5zYXZlQXN8fChcIm9iamVjdFwiIT10eXBlb2Ygd2luZG93fHx3aW5kb3chPT1mP2Z1bmN0aW9uKCl7fTpcImRvd25sb2FkXCJpbiBIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUmJiFhP2Z1bmN0aW9uKGIsZyxoKXt2YXIgaT1mLlVSTHx8Zi53ZWJraXRVUkwsaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtnPWd8fGIubmFtZXx8XCJkb3dubG9hZFwiLGouZG93bmxvYWQ9ZyxqLnJlbD1cIm5vb3BlbmVyXCIsXCJzdHJpbmdcIj09dHlwZW9mIGI/KGouaHJlZj1iLGoub3JpZ2luPT09bG9jYXRpb24ub3JpZ2luP2Uoaik6ZChqLmhyZWYpP2MoYixnLGgpOmUoaixqLnRhcmdldD1cIl9ibGFua1wiKSk6KGouaHJlZj1pLmNyZWF0ZU9iamVjdFVSTChiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5yZXZva2VPYmplY3RVUkwoai5ocmVmKX0sNEU0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShqKX0sMCkpfTpcIm1zU2F2ZU9yT3BlbkJsb2JcImluIG5hdmlnYXRvcj9mdW5jdGlvbihmLGcsaCl7aWYoZz1nfHxmLm5hbWV8fFwiZG93bmxvYWRcIixcInN0cmluZ1wiIT10eXBlb2YgZiluYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihiKGYsaCksZyk7ZWxzZSBpZihkKGYpKWMoZixnLGgpO2Vsc2V7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7aS5ocmVmPWYsaS50YXJnZXQ9XCJfYmxhbmtcIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShpKX0pfX06ZnVuY3Rpb24oYixkLGUsZyl7aWYoZz1nfHxvcGVuKFwiXCIsXCJfYmxhbmtcIiksZyYmKGcuZG9jdW1lbnQudGl0bGU9Zy5kb2N1bWVudC5ib2R5LmlubmVyVGV4dD1cImRvd25sb2FkaW5nLi4uXCIpLFwic3RyaW5nXCI9PXR5cGVvZiBiKXJldHVybiBjKGIsZCxlKTt2YXIgaD1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiPT09Yi50eXBlLGk9L2NvbnN0cnVjdG9yL2kudGVzdChmLkhUTUxFbGVtZW50KXx8Zi5zYWZhcmksaj0vQ3JpT1NcXC9bXFxkXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7aWYoKGp8fGgmJml8fGEpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgRmlsZVJlYWRlcil7dmFyIGs9bmV3IEZpbGVSZWFkZXI7ay5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXt2YXIgYT1rLnJlc3VsdDthPWo/YTphLnJlcGxhY2UoL15kYXRhOlteO10qOy8sXCJkYXRhOmF0dGFjaG1lbnQvZmlsZTtcIiksZz9nLmxvY2F0aW9uLmhyZWY9YTpsb2NhdGlvbj1hLGc9bnVsbH0say5yZWFkQXNEYXRhVVJMKGIpfWVsc2V7dmFyIGw9Zi5VUkx8fGYud2Via2l0VVJMLG09bC5jcmVhdGVPYmplY3RVUkwoYik7Zz9nLmxvY2F0aW9uPW06bG9jYXRpb24uaHJlZj1tLGc9bnVsbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bC5yZXZva2VPYmplY3RVUkwobSl9LDRFNCl9fSk7Zi5zYXZlQXM9Zy5zYXZlQXM9ZyxcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9Zyl9KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RmlsZVNhdmVyLm1pbi5qcy5tYXAiLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBFeHBvcnRDU1ZCdXR0b24gZnJvbSAnLi9idXR0b24nO1xuXG5leHBvcnQgZGVmYXVsdCB7IEV4cG9ydENTVkJ1dHRvbiB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXzsiLCIvKiBlc2xpbnQgbm8tdW5uZWVkZWQtdGVybmFyeTogMCAqL1xuaW1wb3J0IEZpbGVTYXZlciBmcm9tIFwiZmlsZS1zYXZlclwiO1xuXG5leHBvcnQgY29uc3QgZ2V0TWV0YUluZm8gPSAoY29sdW1uczogYW55KSA9PlxuICBjb2x1bW5zXG4gICAgLm1hcCgoY29sdW1uOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZDogY29sdW1uLmRhdGFGaWVsZCxcbiAgICAgIHR5cGU6IGNvbHVtbi5jc3ZUeXBlIHx8IFN0cmluZyxcbiAgICAgIGZvcm1hdHRlcjogY29sdW1uLmNzdkZvcm1hdHRlcixcbiAgICAgIGZvcm1hdEV4dHJhRGF0YTogY29sdW1uLmZvcm1hdEV4dHJhRGF0YSxcbiAgICAgIGhlYWRlcjogY29sdW1uLmNzdlRleHQgfHwgY29sdW1uLnRleHQsXG4gICAgICBleHBvcnQ6IGNvbHVtbi5jc3ZFeHBvcnQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxuICAgICAgcm93OiBOdW1iZXIoY29sdW1uLnJvdykgfHwgMCxcbiAgICAgIHJvd1NwYW46IE51bWJlcihjb2x1bW4ucm93U3BhbikgfHwgMSxcbiAgICAgIGNvbFNwYW46IE51bWJlcihjb2x1bW4uY29sU3BhbikgfHwgMSxcbiAgICAgIGZvb3RlcjogY29sdW1uLmZvb3RlcixcbiAgICAgIGZvb3RlckZvcm1hdHRlcjogY29sdW1uLmZvb3RlckZvcm1hdHRlcixcbiAgICB9KSlcbiAgICAuZmlsdGVyKChfOiBhbnkpID0+IF8uZXhwb3J0KTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybSA9IChcbiAgZGF0YTogYW55LFxuICBtZXRhOiBhbnksXG4gIGNvbHVtbnM6IGFueSxcbiAgXzogYW55LFxuICB7IHNlcGFyYXRvciwgaWdub3JlSGVhZGVyLCBpZ25vcmVGb290ZXIgfTogYW55XG4pID0+IHtcbiAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBtZXRhLmZpbHRlcigobTogYW55KSA9PiBtLmV4cG9ydCk7XG4gIGxldCBjb250ZW50ID0gXCJcIjtcbiAgLy8gZXh0cmFjdCBjc3YgaGVhZGVyXG4gIGlmICghaWdub3JlSGVhZGVyKSB7XG4gICAgY29udGVudCArPSB2aXNpYmxlQ29sdW1ucy5tYXAoKG06IGFueSkgPT4gYFwiJHttLmhlYWRlcn1cImApLmpvaW4oc2VwYXJhdG9yKTtcbiAgICBjb250ZW50ICs9IFwiXFxuXCI7XG4gIH1cbiAgLy8gZXh0cmFjdCBjc3YgYm9keVxuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBjb250ZW50O1xuICBjb250ZW50ICs9IGRhdGFcbiAgICAubWFwKChyb3c6IGFueSwgcm93SW5kZXg6IGFueSkgPT5cbiAgICAgIHZpc2libGVDb2x1bW5zXG4gICAgICAgIC5tYXAoKG06IGFueSkgPT4ge1xuICAgICAgICAgIGxldCBjZWxsQ29udGVudCA9IF8uZ2V0KHJvdywgbS5maWVsZCk7XG4gICAgICAgICAgaWYgKG0uZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBjZWxsQ29udGVudCA9IG0uZm9ybWF0dGVyKFxuICAgICAgICAgICAgICBjZWxsQ29udGVudCxcbiAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgbS5mb3JtYXRFeHRyYURhdGFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtLnR5cGUgPT09IFN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGBcIiR7YCR7Y2VsbENvbnRlbnR9YC5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNlbGxDb250ZW50O1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihzZXBhcmF0b3IpXG4gICAgKVxuICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gIGlmICghaWdub3JlRm9vdGVyKSB7XG4gICAgY29udGVudCArPSBcIlxcblwiO1xuICAgIGNvbnRlbnQgKz0gdmlzaWJsZUNvbHVtbnNcbiAgICAgIC5tYXAoKG06IGFueSwgaTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgbS5mb290ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBfLnBsdWNrKGRhdGEsIGNvbHVtbnNbaV0uZGF0YUZpZWxkKTtcbiAgICAgICAgICByZXR1cm4gYFwiJHttLmZvb3Rlcihjb2x1bW5EYXRhLCBjb2x1bW5zW2ldLCBpKX1cImA7XG4gICAgICAgIH0gZWxzZSBpZiAobS5mb290ZXJGb3JtYXR0ZXIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHttLmZvb3RlckZvcm1hdHRlcihjb2x1bW5zW2ldLCBpKX1cImA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcIiR7bS5mb290ZXJ9XCJgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKHNlcGFyYXRvcik7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2F2ZSA9IChjb250ZW50OiBhbnksIHsgbm9BdXRvQk9NLCBmaWxlTmFtZSwgYmxvYlR5cGUgfTogYW55KSA9PiB7XG4gIEZpbGVTYXZlci5zYXZlQXMoXG4gICAgbmV3IEJsb2IoW2NvbnRlbnRdLCB7IHR5cGU6IGJsb2JUeXBlIH0pLFxuICAgIGZpbGVOYW1lLFxuICAgIG5vQXV0b0JPTVxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNzdk9wZXJhdGlvbiBmcm9tICcuL2Nzdic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3N2T3BlcmF0aW9uXG59O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgU2VhcmNoQmFyIGZyb20gJy4vU2VhcmNoQmFyJztcbmltcG9ydCBDbGVhclNlYXJjaEJ1dHRvbiBmcm9tICcuL2NsZWFyLWJ1dHRvbic7XG5cbmV4cG9ydCBkZWZhdWx0IHsgU2VhcmNoQmFyLCBDbGVhclNlYXJjaEJ1dHRvbiB9O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1jb250aW51ZTogMCAqL1xuLyogZXNsaW50IG5vLWxvbmVseS1pZjogMCAqL1xuLyogZXNsaW50IGNsYXNzLW1ldGhvZHMtdXNlLXRoaXM6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNlYXJjaE1hdGNoUHJvcHMsIFRhYmxlU2VhcmNoUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuaW50ZXJmYWNlIERhdGFDaGFuZ2VMaXN0ZW5lciB7XG4gIGVtaXQ6IChldmVudDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUHJvdmlkZXJQcm9wcyBleHRlbmRzIFNlYXJjaE1hdGNoUHJvcHMge1xuICBkYXRhOiBhbnlbXTtcbiAgZGF0YUNoYW5nZUxpc3RlbmVyPzogRGF0YUNoYW5nZUxpc3RlbmVyO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoUHJvdmlkZXJTdGF0ZSB7XG4gIGRhdGE6IGFueVtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoXG4gICAgb3B0aW9uczogVGFibGVTZWFyY2hQcm9wcyA9IHtcbiAgICAgIHNlYXJjaEZvcm1hdHRlZDogZmFsc2UsXG4gICAgICBhZnRlclNlYXJjaDogdW5kZWZpbmVkLFxuICAgICAgb25Db2x1bW5NYXRjaDogKCkgPT4gZmFsc2UsXG4gICAgfVxuICApID0+XG4gIChcbiAgICBfOiBhbnksXG4gICAgaXNSZW1vdGVTZWFyY2g6ICgpID0+IGJvb2xlYW4sXG4gICAgaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlOiAoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB2b2lkXG4gICkgPT4ge1xuICAgIGNvbnN0IFNlYXJjaENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PGFueT4obnVsbCk7XG5cbiAgICBjbGFzcyBTZWFyY2hQcm92aWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgICAgIFNlYXJjaFByb3ZpZGVyUHJvcHMsXG4gICAgICBTZWFyY2hQcm92aWRlclN0YXRlXG4gICAgPiB7XG4gICAgICBjb25zdHJ1Y3Rvcihwcm9wczogU2VhcmNoUHJvdmlkZXJQcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIGxldCBpbml0aWFsRGF0YSA9IHByb3BzLmRhdGE7XG4gICAgICAgIGlmIChpc1JlbW90ZVNlYXJjaCgpICYmIHRoaXMucHJvcHMuc2VhcmNoVGV4dCAhPT0gXCJcIikge1xuICAgICAgICAgIGhhbmRsZVJlbW90ZVNlYXJjaENoYW5nZSh0aGlzLnByb3BzLnNlYXJjaFRleHQhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbml0aWFsRGF0YSA9IHRoaXMuc2VhcmNoKHByb3BzKTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMaXN0ZW5lcihpbml0aWFsRGF0YSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgZGF0YTogaW5pdGlhbERhdGEgfTtcbiAgICAgIH1cblxuICAgICAgZ2V0U2VhcmNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIHRyaWdnZXJMaXN0ZW5lcihyZXN1bHQ6IGFueSwgc2tpcEluaXQ/OiBhbnkpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJTZWFyY2ggJiYgIXNraXBJbml0KSB7XG4gICAgICAgICAgb3B0aW9ucy5hZnRlclNlYXJjaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRhdGFDaGFuZ2VMaXN0ZW5lcikge1xuICAgICAgICAgIHRoaXMucHJvcHMuZGF0YUNoYW5nZUxpc3RlbmVyLmVtaXQoXCJmaWx0ZXJDaGFuZ2VkXCIsIHJlc3VsdC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFNlYXJjaFByb3ZpZGVyUHJvcHMpIHtcbiAgICAgICAgaWYgKHByZXZQcm9wcy5zZWFyY2hUZXh0ICE9PSB0aGlzLnByb3BzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgICBpZiAoaXNSZW1vdGVTZWFyY2goKSkge1xuICAgICAgICAgICAgaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlKHRoaXMucHJvcHMuc2VhcmNoVGV4dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoKHRoaXMucHJvcHMpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTGlzdGVuZXIocmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzUmVtb3RlU2VhcmNoKCkpIHtcbiAgICAgICAgICAgIGlmICghXy5pc0VxdWFsKHRoaXMuc3RhdGUuZGF0YSwgdGhpcy5wcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGF0YTogdGhpcy5wcm9wcy5kYXRhIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIV8uaXNFcXVhbChwcmV2UHJvcHMuZGF0YSwgdGhpcy5wcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWFyY2godGhpcy5wcm9wcyk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMaXN0ZW5lcihyZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZWFyY2gocHJvcHM6IGFueSkge1xuICAgICAgICBjb25zdCB7IGRhdGEsIGNvbHVtbnMgfSA9IHByb3BzO1xuICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gcHJvcHMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHJvdzogYW55LCByaWR4OiBhbnkpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBjaWR4ID0gMDsgY2lkeCA8IGNvbHVtbnMubGVuZ3RoOyBjaWR4ICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY2lkeF07XG4gICAgICAgICAgICBpZiAoY29sdW1uLnNlYXJjaGFibGUgPT09IGZhbHNlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCB0YXJnZXRWYWx1ZSA9IF8uZ2V0KHJvdywgY29sdW1uLmRhdGFGaWVsZCk7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBvcHRpb25zLnNlYXJjaEZvcm1hdHRlZCkge1xuICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA9IGNvbHVtbi5mb3JtYXR0ZXIoXG4gICAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUsXG4gICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgIHJpZHgsXG4gICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdEV4dHJhRGF0YVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZmlsdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUgPSBjb2x1bW4uZmlsdGVyVmFsdWUodGFyZ2V0VmFsdWUsIHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5vbkNvbHVtbk1hdGNoKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uQ29sdW1uTWF0Y2goe1xuICAgICAgICAgICAgICAgICAgc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB0YXJnZXRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRhcmdldFZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB0YXJnZXRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlID0gdGFyZ2V0VmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRWYWx1ZS5pbmRleE9mKHNlYXJjaFRleHQpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFNlYXJjaENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgZGF0YTogdGhpcy5zdGF0ZS5kYXRhIH19PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgPC9TZWFyY2hDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm92aWRlcjogU2VhcmNoUHJvdmlkZXIsXG4gICAgICBDb25zdW1lcjogU2VhcmNoQ29udGV4dC5Db25zdW1lcixcbiAgICB9O1xuICB9O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgVG9nZ2xlTGlzdCBmcm9tICcuL3RvZ2dsZS1saXN0JztcblxuZXhwb3J0IGRlZmF1bHQgeyBUb2dnbGVMaXN0IH07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgVGFibGVUb29sa2l0UHJvcHMsIFRvb2xraXRDb250ZXh0VHlwZSB9IGZyb20gXCIuXCI7XG5pbXBvcnQgY3JlYXRlU2VhcmNoQ29udGV4dCBmcm9tIFwiLi9zcmMvc2VhcmNoL2NvbnRleHRcIjtcbmltcG9ydCBzdGF0ZWxlc3NEZWNvcmF0b3IgZnJvbSBcIi4vc3RhdGVsZXNzT3BcIjtcblxuY29uc3QgVG9vbGtpdENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFRvb2xraXRDb250ZXh0VHlwZT4oe1xuICBzZWFyY2hQcm9wczoge1xuICAgIHNlYXJjaFRleHQ6IFwiXCIsXG4gICAgb25TZWFyY2g6ICh2YWw6IHN0cmluZykgPT4ge30sXG4gICAgb25DbGVhcjogKCkgPT4ge30sXG4gIH0sXG4gIGNzdlByb3BzOiB7XG4gICAgb25FeHBvcnQ6ICgpID0+IHt9LFxuICB9LFxuICBjb2x1bW5Ub2dnbGVQcm9wczoge1xuICAgIGNvbHVtbnM6IFtdLFxuICAgIHRvZ2dsZXM6IFtdLFxuICAgIG9uQ29sdW1uVG9nZ2xlOiAoZGF0YUZpZWxkOiBzdHJpbmcpID0+IHt9LFxuICB9LFxuICBiYXNlUHJvcHM6IHtcbiAgICBrZXlGaWVsZDogdW5kZWZpbmVkLFxuICAgIGNvbHVtbnM6IFtdLFxuICAgIGRhdGE6IFtdLFxuICAgIGJvb3RzdHJhcDQ6IHVuZGVmaW5lZCxcbiAgfSxcbn0pO1xuXG5jbGFzcyBUb29sa2l0UHJvdmlkZXIgZXh0ZW5kcyBzdGF0ZWxlc3NEZWNvcmF0b3IoUmVhY3QuQ29tcG9uZW50KSB7XG4gIC8vIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gIC8vICAga2V5RmllbGQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLy8gICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgLy8gICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgLy8gICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLy8gICBib290c3RyYXA0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICBzZWFyY2g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAvLyAgICAgUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAvLyAgICAgICBkZWZhdWx0U2VhcmNoOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvLyAgICAgICBzZWFyY2hGb3JtYXR0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgfSksXG4gIC8vICAgXSksXG4gIC8vICAgZXhwb3J0Q1NWOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgLy8gICAgIFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgLy8gICAgICAgZmlsZU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8vICAgICAgIHNlcGFyYXRvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLy8gICAgICAgaWdub3JlSGVhZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgICAgaWdub3JlRm9vdGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgICAgbm9BdXRvQk9NOiBQcm9wVHlwZXMuYm9vbCxcbiAgLy8gICAgICAgYmxvYlR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8vICAgICAgIGV4cG9ydEFsbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICAgIG9ubHlFeHBvcnRGaWx0ZXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8vICAgICAgIG9ubHlFeHBvcnRTZWxlY3Rpb246IFByb3BUeXBlcy5ib29sLFxuICAvLyAgICAgfSksXG4gIC8vICAgXSksXG4gIC8vIH07XG5cbiAgLy8gc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgLy8gICBzZWFyY2g6IGZhbHNlLFxuICAvLyAgIGV4cG9ydENTVjogZmFsc2UsXG4gIC8vICAgYm9vdHN0cmFwNDogZmFsc2UsXG4gIC8vIH07XG5cbiAgXzogYW55O1xuICBzdGF0ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBUYWJsZVRvb2xraXRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBjb2x1bW5Ub2dnbGU6IHt9LFxuICAgICAgc2VhcmNoVGV4dDpcbiAgICAgICAgdHlwZW9mIHByb3BzLnNlYXJjaCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgID8gcHJvcHMuc2VhcmNoLmRlZmF1bHRTZWFyY2ggfHwgXCJcIlxuICAgICAgICAgIDogXCJcIixcbiAgICB9O1xuICAgIHRoaXMuXyA9IG51bGw7XG4gICAgdGhpcy5vbkNsZWFyID0gdGhpcy5vbkNsZWFyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vblNlYXJjaCA9IHRoaXMub25TZWFyY2guYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uQ29sdW1uVG9nZ2xlID0gdGhpcy5vbkNvbHVtblRvZ2dsZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2V0RGVwZW5kZW5jeU1vZHVsZXMgPSB0aGlzLnNldERlcGVuZGVuY3lNb2R1bGVzLmJpbmQodGhpcyk7XG5cbiAgICBpZiAocHJvcHMuY29sdW1uVG9nZ2xlKSB7XG4gICAgICBpbml0aWFsU3RhdGUuY29sdW1uVG9nZ2xlID0gcHJvcHMuY29sdW1ucy5yZWR1Y2UoXG4gICAgICAgIChvYmo6IGFueSwgY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgICBvYmpbY29sdW1uLmRhdGFGaWVsZF0gPSAhY29sdW1uLmhpZGRlbjtcbiAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgICB9XG4gICAgaW5pdGlhbFN0YXRlLnNlYXJjaFRleHQgPVxuICAgICAgdHlwZW9mIHByb3BzLnNlYXJjaCA9PT0gXCJvYmplY3RcIiA/IHByb3BzLnNlYXJjaC5kZWZhdWx0U2VhcmNoIHx8IFwiXCIgOiBcIlwiO1xuICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzOiBUYWJsZVRvb2xraXRQcm9wcywgc3RhdGU6IGFueSkge1xuICAgIGNvbnN0IGN1cnJDb2x1bW5Ub2dnbGUgPSBzdGF0ZS5jb2x1bW5Ub2dnbGU7XG4gICAgbGV0IHByb3BzQ29sdW1uVG9nZ2xlO1xuICAgIGlmIChwcm9wcy5jb2x1bW5Ub2dnbGUpIHtcbiAgICAgIHByb3BzQ29sdW1uVG9nZ2xlID0gcHJvcHMuY29sdW1ucy5yZWR1Y2UoKG9iajogYW55LCBjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBvYmpbY29sdW1uLmRhdGFGaWVsZF0gPSAhY29sdW1uLmhpZGRlbjtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0sIHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcHNDb2x1bW5Ub2dnbGUgPSB7fTtcbiAgICB9XG4gICAgaWYgKGN1cnJDb2x1bW5Ub2dnbGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjdXJyQ29sdW1uVG9nZ2xlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHByb3BzQ29sdW1uVG9nZ2xlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaChzZWFyY2hUZXh0OiBhbnkpIHtcbiAgICBpZiAoc2VhcmNoVGV4dCAhPT0gdGhpcy5zdGF0ZS5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgc2VhcmNoVGV4dCB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNsZWFyKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2hUZXh0OiBcIlwiIH0pO1xuICB9XG5cbiAgb25Db2x1bW5Ub2dnbGUoZGF0YUZpZWxkOiBhbnkpIHtcbiAgICBjb25zdCB7IGNvbHVtblRvZ2dsZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb2x1bW5Ub2dnbGVbZGF0YUZpZWxkXSA9ICFjb2x1bW5Ub2dnbGVbZGF0YUZpZWxkXTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICBjb2x1bW5Ub2dnbGUsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gX1xuICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9ubHkgb25lIHRpbWUgd2hlbiB0YWJsZSByZW5kZXJcbiAgICogcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nL3NyYy9jb250ZXh0L2luZGV4LmpzIHdpbGwgY2FsbCB0aGlzIGNiIGZvciBwYXNzaW5nIHRoZSBfIG1vZHVsZVxuICAgKiBQbGVhc2UgY29uc2lkZXIgdG8gZXh0cmFjdCBhIGNvbW1vbiBtb2R1bGUgdG8gaGFuZGxlIF8gbW9kdWxlLlxuICAgKiB0aGlzIGlzIGp1c3QgYSBxdWljayBmaXhcbiAgICovXG4gIHNldERlcGVuZGVuY3lNb2R1bGVzKF86IGFueSkge1xuICAgIHRoaXMuXyA9IF87XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgYmFzZVByb3BzOiBUYWJsZVRvb2xraXRQcm9wcyA9IHtcbiAgICAgIGtleUZpZWxkOiB0aGlzLnByb3BzLmtleUZpZWxkLFxuICAgICAgY29sdW1uczogdGhpcy5wcm9wcy5jb2x1bW5zLFxuICAgICAgZGF0YTogdGhpcy5wcm9wcy5kYXRhLFxuICAgICAgc2VhcmNoOiB0aGlzLnByb3BzLnNlYXJjaCA/PyBmYWxzZSxcbiAgICAgIGV4cG9ydENTVjogdGhpcy5wcm9wcy5leHBvcnRDU1YgPz8gZmFsc2UsXG4gICAgICBib290c3RyYXA0OiB0aGlzLnByb3BzLmJvb3RzdHJhcDQgPz8gZmFsc2UsXG4gICAgICBjaGlsZHJlbjogdGhpcy5wcm9wcy5jaGlsZHJlbixcbiAgICAgIHNldERlcGVuZGVuY3lNb2R1bGVzOiB0aGlzLnNldERlcGVuZGVuY3lNb2R1bGVzLFxuICAgICAgcmVnaXN0ZXJFeHBvc2VkQVBJOiB0aGlzLnJlZ2lzdGVyRXhwb3NlZEFQSSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnByb3BzLnNlYXJjaCkge1xuICAgICAgYmFzZVByb3BzLnNlYXJjaCA9IHtcbiAgICAgICAgc2VhcmNoQ29udGV4dDogY3JlYXRlU2VhcmNoQ29udGV4dCh0aGlzLnByb3BzLnNlYXJjaCksXG4gICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmNvbHVtblRvZ2dsZSkge1xuICAgICAgYmFzZVByb3BzLmNvbHVtblRvZ2dsZSA9IHtcbiAgICAgICAgdG9nZ2xlczogdGhpcy5zdGF0ZS5jb2x1bW5Ub2dnbGUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPFRvb2xraXRDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgc2VhcmNoUHJvcHM6IHtcbiAgICAgICAgICAgIHNlYXJjaFRleHQ6IHRoaXMuc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIG9uU2VhcmNoOiB0aGlzLm9uU2VhcmNoLFxuICAgICAgICAgICAgb25DbGVhcjogdGhpcy5vbkNsZWFyLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY3N2UHJvcHM6IHtcbiAgICAgICAgICAgIG9uRXhwb3J0OiB0aGlzLmhhbmRsZUV4cG9ydENTVixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbHVtblRvZ2dsZVByb3BzOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLnByb3BzLmNvbHVtbnMsXG4gICAgICAgICAgICB0b2dnbGVzOiB0aGlzLnN0YXRlLmNvbHVtblRvZ2dsZSxcbiAgICAgICAgICAgIG9uQ29sdW1uVG9nZ2xlOiB0aGlzLm9uQ29sdW1uVG9nZ2xlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmFzZVByb3BzLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvVG9vbGtpdENvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFByb3ZpZGVyOiBUb29sa2l0UHJvdmlkZXIsXG4gIENvbnN1bWVyOiBUb29sa2l0Q29udGV4dC5Db25zdW1lcixcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDb2x1bW5EZXNjcmlwdGlvbiwgU2VhcmNoUHJvcHMgfSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nXCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuL2NvbnRleHRcIjtcbmltcG9ydCBUb29sa2l0UHJvdmlkZXIgZnJvbSBcIi4vcHJvdmlkZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgVG9vbGtpdFByb3ZpZGVyO1xuZXhwb3J0IGNvbnN0IFRvb2xraXRDb250ZXh0ID0gQ29udGV4dDtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2x1bW5Ub2dnbGUgfSBmcm9tIFwiLi9zcmMvY29sdW1uLXRvZ2dsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1ZFeHBvcnQgfSBmcm9tIFwiLi9zcmMvY3N2XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gXCIuL3NyYy9zZWFyY2hcIjtcblxuLyoqXG4gKiBkZWNsYXJhdGlvbiBmb3IgdGFibGUgdG9vbGtpdCBzdWIgbW9kdWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0ZWRTZWFyY2hQcm9wcyB7XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgb25TZWFyY2g6ICh2YWw6IHN0cmluZykgPT4gdm9pZDtcbiAgb25DbGVhcjogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hNYXRjaFByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IHtcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBjb2x1bW46IENvbHVtbkRlc2NyaXB0aW9uPFQ+O1xuICByb3c6IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTZWFyY2hQcm9wczxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG4gIHNlYXJjaEZvcm1hdHRlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHRTZWFyY2g/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvbkNvbHVtbk1hdGNoPzogKHByb3BzOiBTZWFyY2hNYXRjaFByb3BzPFQ+KSA9PiBib29sZWFuO1xuICBjdXN0b21NYXRjaEZ1bmM/OiAoKHByb3BzOiBTZWFyY2hNYXRjaFByb3BzPFQ+KSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZDtcbiAgYWZ0ZXJTZWFyY2g/OiAobmV3UmVzdWx0OiBUW10pID0+IHZvaWQgfCB1bmRlZmluZWQ7XG4gIHNlYXJjaENvbnRleHQ/OiBGdW5jdGlvbjtcbiAgc2VhcmNoVGV4dD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU1ZQcm9wcyB7XG4gIGZpbGVOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzZXBhcmF0b3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlnbm9yZUhlYWRlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlnbm9yZUZvb3Rlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG5vQXV0b0JPTT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBkZWZhdWx0IGlzIHRleHQvcGxhaW47Y2hhcnNldD11dGYtOFxuICAgKi9cbiAgYmxvYlR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGV4cG9ydEFsbD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG9ubHlFeHBvcnRTZWxlY3Rpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBvbmx5RXhwb3J0RmlsdGVyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlVG9vbGtpdFByb3BzPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IHtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHNlYXJjaD86IFRhYmxlU2VhcmNoUHJvcHM8VD4gfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBrZXlGaWVsZDoga2V5b2YgVCB8IHN0cmluZztcbiAgZGF0YTogVFtdO1xuICByZWY/OiBhbnk7XG4gIGNvbHVtbnM6IEFycmF5PENvbHVtbkRlc2NyaXB0aW9uPFQ+PjtcbiAgY2hpbGRyZW46IChwcm9wczogVG9vbGtpdENvbnRleHRUeXBlKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIGV4cG9ydENTVj86IGJvb2xlYW4gfCBDU1ZQcm9wcyB8IHVuZGVmaW5lZDtcbiAgY29sdW1uVG9nZ2xlPzogeyBbZGF0YUZpZWxkOiBzdHJpbmddOiBib29sZWFuIH0gfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzZXREZXBlbmRlbmN5TW9kdWxlcz86IEZ1bmN0aW9uO1xuICByZWdpc3RlckV4cG9zZWRBUEk/OiBGdW5jdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb29sa2l0Q29udGV4dFR5cGUge1xuICBzZWFyY2hQcm9wczogSW5qZWN0ZWRTZWFyY2hQcm9wcztcbiAgY3N2UHJvcHM6IHtcbiAgICBvbkV4cG9ydDogKHNvdXJjZT86IGFueSkgPT4gdm9pZDtcbiAgfTtcbiAgY29sdW1uVG9nZ2xlUHJvcHM6IHtcbiAgICBjb2x1bW5zOiBDb2x1bW5EZXNjcmlwdGlvbltdO1xuICAgIC8qKlxuICAgICAqIGFycmF5IG9mIHRvZ2dsZWQgY29sdW1uc1xuICAgICAqL1xuICAgIHRvZ2dsZXM6IGJvb2xlYW5bXTtcbiAgICBvbkNvbHVtblRvZ2dsZTogKGRhdGFGaWVsZDogc3RyaW5nKSA9PiB2b2lkO1xuICB9O1xuICBiYXNlUHJvcHM6IHtcbiAgICAvKipcbiAgICAgKiB0YWJsZSBrZXkgZmllbGRcbiAgICAgKi9cbiAgICBrZXlGaWVsZDogYW55O1xuICAgIGNvbHVtbnM6IENvbHVtbkRlc2NyaXB0aW9uW107XG4gICAgZGF0YTogYW55W107XG4gICAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9nZ2xlTGlzdFByb3BzIHtcbiAgY29sdW1uczogQ29sdW1uRGVzY3JpcHRpb25bXTtcbiAgLyoqXG4gICAqIGFycmF5IG9mIHRvZ2dsZWQgY29sdW1uc1xuICAgKi9cbiAgdG9nZ2xlczogYm9vbGVhbltdO1xuICBvbkNvbHVtblRvZ2dsZTogKGRhdGFGaWVsZDogc3RyaW5nKSA9PiB2b2lkO1xuICBidG5DbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29udGV4dHVhbD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDU1ZCdXR0b25Qcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9uRXhwb3J0OiAoKSA9PiB2b2lkO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hCYXJQcm9wczxUID0gYW55PiBleHRlbmRzIFNlYXJjaFByb3BzPFQ+IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG4gIGRlbGF5PzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBzZWFyY2hUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0YWJsZUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWY/OiBSZWFjdC5SZWZPYmplY3Q8UmVhY3QuQ29tcG9uZW50PFNlYXJjaFByb3BzPFQ+Pj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYXJTZWFyY2hCdXR0b25Qcm9wcyB7XG4gIG9uQ2xlYXI/OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbi8qIGVzbGludCBuby1yZXR1cm4tYXNzaWduOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTZWFyY2hCYXJQcm9wcyB9IGZyb20gXCIuLi8uLlwiO1xuXG5jb25zdCBoYW5kbGVEZWJvdW5jZSA9IDxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPihcbiAgZnVuYzogVCxcbiAgd2FpdDogbnVtYmVyLFxuICBpbW1lZGlhdGU/OiBib29sZWFuXG4pID0+IHtcbiAgbGV0IHRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuXG4gIHJldHVybiAoLi4uYXJnczogUGFyYW1ldGVyczxUPikgPT4ge1xuICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgdGltZW91dCA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcblxuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblxuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IHx8IDApO1xuXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9O1xufTtcblxuaW50ZXJmYWNlIFNlYXJjaEJhclN0YXRlIHtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuY2xhc3MgU2VhcmNoQmFyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFNlYXJjaEJhclByb3BzLCBTZWFyY2hCYXJTdGF0ZT4ge1xuICBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTZWFyY2hCYXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWU6IHByb3BzLnNlYXJjaFRleHQgPz8gXCJcIixcbiAgICB9O1xuICB9XG5cbiAgb25DaGFuZ2VWYWx1ZSA9IChlOiBhbnkpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IGUudGFyZ2V0LnZhbHVlIH0pO1xuICB9O1xuXG4gIG9uS2V5dXAgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBkZWxheSA9IDI1MCwgb25TZWFyY2ggfSA9IHRoaXMucHJvcHMgYXMgYW55O1xuICAgIGNvbnN0IGRlYm91bmNlQ2FsbGJhY2sgPSBoYW5kbGVEZWJvdW5jZSgoKSA9PiB7XG4gICAgICBvblNlYXJjaCEodGhpcy5pbnB1dD8udmFsdWUgPz8gXCJcIik7XG4gICAgfSwgZGVsYXkpO1xuICAgIGRlYm91bmNlQ2FsbGJhY2soKTtcbiAgfTtcblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBTZWFyY2hCYXJQcm9wcykge1xuICAgIGlmICh0aGlzLnByb3BzLnNlYXJjaFRleHQgIT09IHByZXZQcm9wcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucHJvcHMuc2VhcmNoVGV4dCB8fCBcIlwiIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUgPSBcIlwiLFxuICAgICAgc3R5bGUgPSB7fSxcbiAgICAgIHBsYWNlaG9sZGVyID0gXCJTZWFyY2hcIixcbiAgICAgIHRhYmxlSWQgPSBcIjBcIixcbiAgICAgIHNlYXJjaFRleHQgPSBcIlNlYXJjaCB0aGlzIHRhYmxlXCIsXG4gICAgfSA9IHRoaXMucHJvcHMgYXMgYW55O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbCBodG1sRm9yPXtgc2VhcmNoLWJhci0ke3RhYmxlSWR9YH0gY2xhc3NOYW1lPVwic2VhcmNoLWxhYmVsXCI+XG4gICAgICAgIDxzcGFuIGlkPXtgc2VhcmNoLWJhci0ke3RhYmxlSWR9LWxhYmVsYH0gY2xhc3NOYW1lPVwic3Itb25seVwiPlxuICAgICAgICAgIHtzZWFyY2hUZXh0fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHJlZj17KG4pID0+IHsgdGhpcy5pbnB1dCA9IG47IH19XG4gICAgICAgICAgaWQ9e2BzZWFyY2gtYmFyLSR7dGFibGVJZH1gfVxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBzdHlsZT17c3R5bGUgYXMgYW55fVxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT17YHNlYXJjaC1iYXItJHt0YWJsZUlkfS1sYWJlbGB9XG4gICAgICAgICAgb25LZXlVcD17KCkgPT4gdGhpcy5vbktleXVwKCl9XG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2VWYWx1ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e2Bmb3JtLWNvbnRyb2wgJHtjbGFzc05hbWV9YH1cbiAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbn1cblxuLy8gU2VhcmNoQmFyLnByb3BUeXBlcyA9IHtcbi8vICAgb25TZWFyY2g6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4vLyAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuLy8gICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbi8vICAgc2VhcmNoVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgdGFibGVJZDogUHJvcFR5cGVzLnN0cmluZyxcbi8vICAgc3JUZXh0OiBQcm9wVHlwZXMuc3RyaW5nXG4vLyB9O1xuXG4vLyBTZWFyY2hCYXIuZGVmYXVsdFByb3BzID0ge1xuLy8gICBjbGFzc05hbWU6ICcnLFxuLy8gICBzdHlsZToge30sXG4vLyAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoJyxcbi8vICAgZGVsYXk6IDI1MCxcbi8vICAgc2VhcmNoVGV4dDogJycsXG4vLyAgIHRhYmxlSWQ6ICcwJyxcbi8vICAgc3JUZXh0OiAnU2VhcmNoIHRoaXMgdGFibGUnXG4vLyB9O1xuXG5leHBvcnQgZGVmYXVsdCBTZWFyY2hCYXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBPcGVyYXRpb24gZnJvbSBcIi4vc3JjL29wXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChCYXNlOiBhbnkpID0+XG4gIGNsYXNzIFN0YXRlbGVzc09wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvbi5jc3ZPcGVyYXRpb24oQmFzZSkge1xuICAgIHJlZ2lzdGVyRXhwb3NlZEFQSSA9ICh0YWJsZUV4cG9zZWRBUElFbWl0dGVyOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlciA9IHRhYmxlRXhwb3NlZEFQSUVtaXR0ZXI7XG4gICAgfTtcbiAgfTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgZ2V0TWV0YUluZm8sIHNhdmUsIHRyYW5zZm9ybSB9IGZyb20gXCIuLi9jc3YvZXhwb3J0ZXJcIjtcblxuY29uc3QgY3N2RGVmYXVsdE9wdGlvbnMgPSB7XG4gIGZpbGVOYW1lOiBcInNwcmVhZHNoZWV0LmNzdlwiLFxuICBzZXBhcmF0b3I6IFwiLFwiLFxuICBpZ25vcmVIZWFkZXI6IGZhbHNlLFxuICBpZ25vcmVGb290ZXI6IHRydWUsXG4gIG5vQXV0b0JPTTogdHJ1ZSxcbiAgYmxvYlR5cGU6IFwidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04XCIsXG4gIGV4cG9ydEFsbDogdHJ1ZSxcbiAgb25seUV4cG9ydFNlbGVjdGlvbjogZmFsc2UsXG59O1xuXG5leHBvcnQgZGVmYXVsdCAoQmFzZTogYW55KSA9PlxuICBjbGFzcyBDU1ZPcGVyYXRpb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8dHlwZW9mIEJhc2U+IHtcbiAgICBfOiBhbnk7XG4gICAgdGFibGVFeHBvc2VkQVBJRW1pdHRlcjogYW55O1xuXG4gICAgaGFuZGxlRXhwb3J0Q1NWID0gKHNvdXJjZTogYW55KSA9PiB7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIGV4cG9ydENTViwga2V5RmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBtZXRhID0gZ2V0TWV0YUluZm8oY29sdW1ucyk7XG4gICAgICBjb25zdCBvcHRpb25zID1cbiAgICAgICAgZXhwb3J0Q1NWID09PSB0cnVlXG4gICAgICAgICAgPyBjc3ZEZWZhdWx0T3B0aW9uc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAuLi5jc3ZEZWZhdWx0T3B0aW9ucyxcbiAgICAgICAgICAgICAgLi4uZXhwb3J0Q1NWLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gZ2V0IGRhdGEgZm9yIGNzdiBleHBvcnRcbiAgICAgIGxldCBkYXRhOiBhbnk7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBkYXRhID0gc291cmNlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmV4cG9ydEFsbCkge1xuICAgICAgICBkYXRhID0gdGhpcy5wcm9wcy5kYXRhO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm9ubHlFeHBvcnRGaWx0ZXJlZCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiB7IHJlc3VsdDogYW55IH0gPSB7IHJlc3VsdDogdW5kZWZpbmVkIH07XG4gICAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlci5lbWl0KFwiZ2V0LmZpbHRlcmVkLnJvd3NcIiwgcGF5bG9hZCk7XG4gICAgICAgIGRhdGEgPSBwYXlsb2FkLnJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7IHJlc3VsdDogdW5kZWZpbmVkIH07XG4gICAgICAgIHRoaXMudGFibGVFeHBvc2VkQVBJRW1pdHRlci5lbWl0KFwiZ2V0LnRhYmxlLmRhdGFcIiwgcGF5bG9hZCk7XG4gICAgICAgIGRhdGEgPSBwYXlsb2FkLnJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgLy8gZmlsdGVyIGRhdGEgYnkgcm93IHNlbGVjdGlvblxuICAgICAgaWYgKG9wdGlvbnMub25seUV4cG9ydFNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0geyByZXN1bHQ6IHVuZGVmaW5lZCB9O1xuICAgICAgICB0aGlzLnRhYmxlRXhwb3NlZEFQSUVtaXR0ZXIuZW1pdChcImdldC5zZWxlY3RlZC5yb3dzXCIsIHBheWxvYWQpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25zID0gcGF5bG9hZC5yZXN1bHQgPz8gW107XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4gc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dba2V5RmllbGRdKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0cmFuc2Zvcm0oZGF0YSwgbWV0YSwgY29sdW1ucywgdGhpcy5fLCBvcHRpb25zKTtcbiAgICAgIHNhdmUoY29udGVudCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgfTtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgVGFibGVUb29sa2l0UHJvcHMgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IFRvb2xraXRDb250ZXh0IGZyb20gXCIuL2NvbnRleHRcIjtcblxuY29uc3QgVG9vbGtpdHByb3ZpZGVyID0gKFxuICBwcm9wczogVGFibGVUb29sa2l0UHJvcHNcbik6IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGwgPT4gKFxuICA8VG9vbGtpdENvbnRleHQuUHJvdmlkZXIgey4uLnByb3BzfT5cbiAgICA8VG9vbGtpdENvbnRleHQuQ29uc3VtZXI+XG4gICAgICB7KHRvb2tLaXRQcm9wcykgPT4gcHJvcHMuY2hpbGRyZW4odG9va0tpdFByb3BzKX1cbiAgICA8L1Rvb2xraXRDb250ZXh0LkNvbnN1bWVyPlxuICA8L1Rvb2xraXRDb250ZXh0LlByb3ZpZGVyPlxuKTtcblxuVG9vbGtpdHByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUb29sa2l0cHJvdmlkZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2ODgpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJleHBvcnRDU1ZCdXR0b25EZWZhdWx0UHJvcHMiLCJjbGFzc05hbWUiLCJzdHlsZSIsIkV4cG9ydENTVkJ1dHRvbiIsInByb3BzIiwib25FeHBvcnQiLCJjaGlsZHJlbiIsInJlc3QiLCJ0eXBlIiwib25DbGljayIsInByb3BUeXBlcyIsIm5vZGUiLCJpc1JlcXVpcmVkIiwiZnVuYyIsInN0cmluZyIsIm9iamVjdCIsIkNsZWFyQnV0dG9uIiwib25DbGVhciIsInRleHQiLCJUb2dnbGVMaXN0IiwiY29sdW1ucyIsIm9uQ29sdW1uVG9nZ2xlIiwidG9nZ2xlcyIsImJ0bkNsYXNzTmFtZSIsImNvbnRleHR1YWwiLCJtYXAiLCJjb2x1bW4iLCJ0b2dnbGUiLCJkYXRhRmllbGQiLCJrZXkiLCJhcnJheSIsImIiLCJhIiwiYXV0b0JvbSIsImNvbnNvbGUiLCJ3YXJuIiwidGVzdCIsIkJsb2IiLCJjIiwiZCIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsIm9ubG9hZCIsImciLCJyZXNwb25zZSIsIm9uZXJyb3IiLCJlcnJvciIsInNlbmQiLCJzdGF0dXMiLCJlIiwiZGlzcGF0Y2hFdmVudCIsIk1vdXNlRXZlbnQiLCJkb2N1bWVudCIsImNyZWF0ZUV2ZW50IiwiaW5pdE1vdXNlRXZlbnQiLCJ3aW5kb3ciLCJmIiwiZ2xvYmFsIiwibmF2aWdhdG9yIiwidXNlckFnZW50Iiwic2F2ZUFzIiwiSFRNTEFuY2hvckVsZW1lbnQiLCJwcm90b3R5cGUiLCJoIiwiaSIsIlVSTCIsIndlYmtpdFVSTCIsImoiLCJjcmVhdGVFbGVtZW50IiwibmFtZSIsImRvd25sb2FkIiwicmVsIiwiaHJlZiIsIm9yaWdpbiIsImxvY2F0aW9uIiwidGFyZ2V0IiwiY3JlYXRlT2JqZWN0VVJMIiwic2V0VGltZW91dCIsInJldm9rZU9iamVjdFVSTCIsIm1zU2F2ZU9yT3BlbkJsb2IiLCJ0aXRsZSIsImJvZHkiLCJpbm5lclRleHQiLCJIVE1MRWxlbWVudCIsInNhZmFyaSIsIkZpbGVSZWFkZXIiLCJrIiwib25sb2FkZW5kIiwicmVzdWx0IiwicmVwbGFjZSIsInJlYWRBc0RhdGFVUkwiLCJsIiwibSIsImdldE1ldGFJbmZvIiwiZmllbGQiLCJjc3ZUeXBlIiwiU3RyaW5nIiwiZm9ybWF0dGVyIiwiY3N2Rm9ybWF0dGVyIiwiZm9ybWF0RXh0cmFEYXRhIiwiaGVhZGVyIiwiY3N2VGV4dCIsImV4cG9ydCIsImNzdkV4cG9ydCIsInJvdyIsIk51bWJlciIsInJvd1NwYW4iLCJjb2xTcGFuIiwiZm9vdGVyIiwiZm9vdGVyRm9ybWF0dGVyIiwiZmlsdGVyIiwiXyIsInRyYW5zZm9ybSIsImRhdGEiLCJtZXRhIiwic2VwYXJhdG9yIiwiaWdub3JlSGVhZGVyIiwiaWdub3JlRm9vdGVyIiwidmlzaWJsZUNvbHVtbnMiLCJjb250ZW50Iiwiam9pbiIsImxlbmd0aCIsInJvd0luZGV4IiwiY2VsbENvbnRlbnQiLCJnZXQiLCJjb2x1bW5EYXRhIiwicGx1Y2siLCJzYXZlIiwibm9BdXRvQk9NIiwiZmlsZU5hbWUiLCJibG9iVHlwZSIsImNzdk9wZXJhdGlvbiIsIlNlYXJjaEJhciIsIkNsZWFyU2VhcmNoQnV0dG9uIiwib3B0aW9ucyIsInNlYXJjaEZvcm1hdHRlZCIsImFmdGVyU2VhcmNoIiwidW5kZWZpbmVkIiwib25Db2x1bW5NYXRjaCIsImlzUmVtb3RlU2VhcmNoIiwiaGFuZGxlUmVtb3RlU2VhcmNoQ2hhbmdlIiwiU2VhcmNoQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJTZWFyY2hQcm92aWRlciIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwic3VwZXIiLCJpbml0aWFsRGF0YSIsInRoaXMiLCJzZWFyY2hUZXh0Iiwic2VhcmNoIiwidHJpZ2dlckxpc3RlbmVyIiwic3RhdGUiLCJnZXRTZWFyY2hlZCIsInNraXBJbml0IiwiZGF0YUNoYW5nZUxpc3RlbmVyIiwiZW1pdCIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInNldFN0YXRlIiwiaXNFcXVhbCIsInRvTG93ZXJDYXNlIiwicmlkeCIsImNpZHgiLCJzZWFyY2hhYmxlIiwidGFyZ2V0VmFsdWUiLCJmaWx0ZXJWYWx1ZSIsInZhbHVlIiwidG9TdHJpbmciLCJpbmRleE9mIiwicmVuZGVyIiwiUHJvdmlkZXIiLCJDb25zdW1lciIsIlRvb2xraXRDb250ZXh0Iiwic2VhcmNoUHJvcHMiLCJvblNlYXJjaCIsInZhbCIsImNzdlByb3BzIiwiY29sdW1uVG9nZ2xlUHJvcHMiLCJiYXNlUHJvcHMiLCJrZXlGaWVsZCIsImJvb3RzdHJhcDQiLCJUb29sa2l0UHJvdmlkZXIiLCJpbml0aWFsU3RhdGUiLCJjb2x1bW5Ub2dnbGUiLCJkZWZhdWx0U2VhcmNoIiwiYmluZCIsInNldERlcGVuZGVuY3lNb2R1bGVzIiwicmVkdWNlIiwib2JqIiwiaGlkZGVuIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiY3VyckNvbHVtblRvZ2dsZSIsInByb3BzQ29sdW1uVG9nZ2xlIiwiZXhwb3J0Q1NWIiwicmVnaXN0ZXJFeHBvc2VkQVBJIiwic2VhcmNoQ29udGV4dCIsImhhbmRsZUV4cG9ydENTViIsImRlZmF1bHQiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwicHJvcEZ1bGxOYW1lIiwic2VjcmV0IiwiZXJyIiwiRXJyb3IiLCJnZXRTaGltIiwiUmVhY3RQcm9wVHlwZXMiLCJiaWdpbnQiLCJib29sIiwibnVtYmVyIiwic3ltYm9sIiwiYW55IiwiYXJyYXlPZiIsImVsZW1lbnQiLCJlbGVtZW50VHlwZSIsImluc3RhbmNlT2YiLCJvYmplY3RPZiIsIm9uZU9mIiwib25lT2ZUeXBlIiwic2hhcGUiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaGFuZGxlRGVib3VuY2UiLCJ3YWl0IiwiaW1tZWRpYXRlIiwidGltZW91dCIsImFyZ3MiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0IiwiYXBwbHkiLCJpbnB1dCIsIm9uQ2hhbmdlVmFsdWUiLCJvbktleXVwIiwiZGVsYXkiLCJkZWJvdW5jZUNhbGxiYWNrIiwicGxhY2Vob2xkZXIiLCJ0YWJsZUlkIiwiaHRtbEZvciIsImlkIiwicmVmIiwibiIsIm9uS2V5VXAiLCJvbkNoYW5nZSIsIkJhc2UiLCJ0YWJsZUV4cG9zZWRBUElFbWl0dGVyIiwiY3N2RGVmYXVsdE9wdGlvbnMiLCJleHBvcnRBbGwiLCJvbmx5RXhwb3J0U2VsZWN0aW9uIiwic291cmNlIiwib25seUV4cG9ydEZpbHRlcmVkIiwicGF5bG9hZCIsInNlbGVjdGlvbnMiLCJpbmNsdWRlcyIsIlRvb2xraXRwcm92aWRlciIsInRvb2tLaXRQcm9wcyIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJjYWxsIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC5taW4uanMiLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsVUFDUixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsU0FBVUosR0FDUSxpQkFBWkMsUUFDZEEsUUFBc0MsNkJBQUlELEVBQVFHLFFBQVEsVUFFMURKLEVBQW1DLDZCQUFJQyxFQUFRRCxFQUFZLE1BQzVELENBVEQsQ0FTR08sS0FBT0MsRyx5S0NUVixrQkFDQSxZQUlNQyxFQUE4QixDQUNsQ0MsVUFBVyxHQUNYQyxNQUFPLENBQUMsR0FHSkMsRUFDSkMsSUFFQSxNQUFNLFNBQUVDLEVBQVEsU0FBRUMsRUFBUSxVQUFFTCxLQUFjTSxHQUFTLElBQUtQLEtBQWdDSSxHQUV4RixPQUNFLGtDQUNFSSxLQUFLLFNBQ0xQLFVBQVcsMENBQTBDQSxJQUNyRFEsUUFBUyxJQUFNSixPQUNYRSxHQUVIRCxJQUtQSCxFQUFnQk8sVUFBWSxDQUMxQkosU0FBVSxVQUFVSyxLQUFLQyxXQUN6QlAsU0FBVSxVQUFVUSxLQUFLRCxXQUN6QlgsVUFBVyxVQUFVYSxPQUNyQlosTUFBTyxVQUFVYSxRQUduQixVQUFlWixDLDhKQ2xDZixrQkFDQSxZQUdNYSxFQUFjLEVBQ2xCQyxVQUNBQyxPQUFPLFFBQ1BqQixZQUFZLE1BRVosa0NBQVFBLFVBQVcsbUJBQW1CQSxJQUFhUSxRQUFTUSxHQUN6REMsR0FJTEYsRUFBWU4sVUFBWSxDQUN0Qk8sUUFBUyxVQUFVSixLQUFLRCxXQUN4QlgsVUFBVyxVQUFVYSxPQUNyQkksS0FBTSxVQUFVSixRQVFsQixVQUFlRSxDLCtKQ3pCZixrQkFDQSxZQUlNRyxFQUFhLEVBQ2pCQyxVQUNBQyxpQkFDQUMsVUFDQUMsZUFBZSxHQUNmdEIsWUFB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dkIsR0FBMEIsaUJBQWZnTyxXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU92SCxNQUFRLElBQUl3SCxTQUFTLGNBQWIsRUFDaEIsQ0FBRSxNQUFPM04sR0FDUixHQUFzQixpQkFBWE0sT0FBcUIsT0FBT0EsTUFDeEMsQ0FDQSxDQVB1QixHQ0dFK00sRUFBb0IsSSIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2Nzdi9idXR0b24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9zZWFyY2gvY2xlYXItYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY29sdW1uLXRvZ2dsZS90b2dnbGUtbGlzdC50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZpbGUtc2F2ZXIvZGlzdC9GaWxlU2F2ZXIubWluLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jc3YvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jc3YvZXhwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL29wL2luZGV4LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9zZWFyY2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY29sdW1uLXRvZ2dsZS9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9TZWFyY2hCYXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3N0YXRlbGVzc09wLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9vcC9jc3YudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvcHJvdmlkZXIudHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJyZWFjdFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdUb29sa2l0XCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1Rvb2xraXRcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSk7XG59KShzZWxmLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18pID0+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+IHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAga2V5RmllbGQ6IGtleW9mIFQgfCBzdHJpbmc7XG4gIGRhdGE6IFRbXTtcbiAgcmVmPzogYW55O1xuICBjb2x1bW5zOiBBcnJheTxDb2x1bW5EZXNjcmlwdGlvbjxUPj47XG4gIGNoaWxkcmVuOiAocHJvcHM6IFRvb2xraXRDb250ZXh0VHlwZSkgPT4gSlNYLkVsZW1lbnQ7XG4gIGV4cG9ydENTVj86IGJvb2xlYW4gfCBDU1ZQcm9wcyB8IHVuZGVmaW5lZDtcbiAgY29sdW1uVG9nZ2xlPzogeyBbZGF0YUZpZWxkOiBzdHJpbmddOiBib29sZWFuIH0gfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzZXREZXBlbmRlbmN5TW9kdWxlcz86IEZ1bmN0aW9uO1xuICByZWdpc3RlckV4cG9zZWRBUEk/OiBGdW5jdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb29sa2l0Q29udGV4dFR5cGUge1xuICBzZWFyY2hQcm9wczogSW5qZWN0ZWRTZWFyY2hQcm9wcztcbiAgY3N2UHJvcHM6IHtcbiAgICBvbkV4cG9ydDogKHNvdXJjZT86IGFueSkgPT4gdm9pZDtcbiAgfTtcbiAgY29sdW1uVG9nZ2xlUHJvcHM6IHtcbiAgICBjb2x1bW5zOiBDb2x1bW5EZXNjcmlwdGlvbltdO1xuICAgIC8qKlxuICAgICAqIGFycmF5IG9mIHRvZ2dsZWQgY29sdW1uc1xuICAgICAqL1xuICAgIHRvZ2dsZXM6IGJvb2xlYW5bXTtcbiAgICBvbkNvbHVtblRvZ2dsZTogKGRhdGFGaWVsZDogc3RyaW5nKSA9PiB2b2lkO1xuICB9O1xuICBiYXNlUHJvcHM6IHtcbiAgICAvKipcbiAgICAgKiB0YWJsZSBrZXkgZmllbGRcbiAgICAgKi9cbiAgICBrZXlGaWVsZDogYW55O1xuICAgIGNvbHVtbnM6IENvbHVtbkRlc2NyaXB0aW9uW107XG4gICAgZGF0YTogYW55W107XG4gICAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9nZ2xlTGlzdFByb3BzIHtcbiAgY29sdW1uczogQ29sdW1uRGVzY3JpcHRpb25bXTtcbiAgLyoqXG4gICAqIGFycmF5IG9mIHRvZ2dsZWQgY29sdW1uc1xuICAgKi9cbiAgdG9nZ2xlczogYm9vbGVhbltdO1xuICBvbkNvbHVtblRvZ2dsZTogKGRhdGFGaWVsZDogc3RyaW5nKSA9PiB2b2lkO1xuICBidG5DbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29udGV4dHVhbD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDU1ZCdXR0b25Qcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9uRXhwb3J0OiAoKSA9PiB2b2lkO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hCYXJQcm9wcyA8VCA9IGFueT4gZXh0ZW5kcyBTZWFyY2hQcm9wczxUPiB7XG4gIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkO1xuICBkZWxheT86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgc2VhcmNoVGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdGFibGVJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVmPzogUmVhY3QuUmVmT2JqZWN0PFJlYWN0LkNvbXBvbmVudDxTZWFyY2hQcm9wczxUPj4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsZWFyU2VhcmNoQnV0dG9uUHJvcHMge1xuICBvbkNsZWFyPzogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBjbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYmlnaW50OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGVsZW1lbnRUeXBlOiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW0sXG5cbiAgICBjaGVja1Byb3BUeXBlczogZW1wdHlGdW5jdGlvbldpdGhSZXNldCxcbiAgICByZXNldFdhcm5pbmdDYWNoZTogZW1wdHlGdW5jdGlvblxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG4vKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyUHJvcHMgfSBmcm9tIFwiLi4vLi5cIjtcblxuY29uc3QgaGFuZGxlRGVib3VuY2UgPSA8VCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD4oXG4gIGZ1bmM6IFQsXG4gIHdhaXQ6IG51bWJlcixcbiAgaW1tZWRpYXRlPzogYm9vbGVhblxuKSA9PiB7XG4gIGxldCB0aW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcblxuICByZXR1cm4gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pID0+IHtcbiAgICBjb25zdCBsYXRlciA9ICgpID0+IHtcbiAgICAgIHRpbWVvdXQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG5cbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG5cbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCB8fCAwKTtcblxuICAgIGlmIChjYWxsTm93KSB7XG4gICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfTtcbn07XG5cbmludGVyZmFjZSBTZWFyY2hCYXJTdGF0ZSB7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmNsYXNzIFNlYXJjaEJhciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxTZWFyY2hCYXJQcm9wcywgU2VhcmNoQmFyU3RhdGU+IHtcbiAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU2VhcmNoQmFyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBwcm9wcy5zZWFyY2hUZXh0ID8/IFwiXCIsXG4gICAgfTtcbiAgfVxuXG4gIG9uQ2hhbmdlVmFsdWUgPSAoZTogYW55KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBlLnRhcmdldC52YWx1ZSB9KTtcbiAgfTtcblxuICBvbktleXVwID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZGVsYXkgPSAyNTAsIG9uU2VhcmNoIH0gPSB0aGlzLnByb3BzIGFzIGFueTtcbiAgICBjb25zdCBkZWJvdW5jZUNhbGxiYWNrID0gaGFuZGxlRGVib3VuY2UoKCkgPT4ge1xuICAgICAgb25TZWFyY2ghKHRoaXMuaW5wdXQ/LnZhbHVlID8/IFwiXCIpO1xuICAgIH0sIGRlbGF5KTtcbiAgICBkZWJvdW5jZUNhbGxiYWNrKCk7XG4gIH07XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogU2VhcmNoQmFyUHJvcHMpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWFyY2hUZXh0ICE9PSBwcmV2UHJvcHMuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnByb3BzLnNlYXJjaFRleHQgfHwgXCJcIiB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lID0gXCJcIixcbiAgICAgIHN0eWxlID0ge30sXG4gICAgICBwbGFjZWhvbGRlciA9IFwiU2VhcmNoXCIsXG4gICAgICB0YWJsZUlkID0gXCIwXCIsXG4gICAgICBzZWFyY2hUZXh0ID0gXCJTZWFyY2ggdGhpcyB0YWJsZVwiLFxuICAgIH0gPSB0aGlzLnByb3BzIGFzIGFueTtcblxuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwgaHRtbEZvcj17YHNlYXJjaC1iYXItJHt0YWJsZUlkfWB9IGNsYXNzTmFtZT1cInNlYXJjaC1sYWJlbFwiPlxuICAgICAgICA8c3BhbiBpZD17YHNlYXJjaC1iYXItJHt0YWJsZUlkfS1sYWJlbGB9IGNsYXNzTmFtZT1cInNyLW9ubHlcIj5cbiAgICAgICAgICB7c2VhcmNoVGV4dH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9eyhuKSA9PiAodGhpcy5pbnB1dCA9IG4pfVxuICAgICAgICAgIGlkPXtgc2VhcmNoLWJhci0ke3RhYmxlSWR9YH1cbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgc3R5bGU9e3N0eWxlIGFzIGFueX1cbiAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2BzZWFyY2gtYmFyLSR7dGFibGVJZH0tbGFiZWxgfVxuICAgICAgICAgIG9uS2V5VXA9eygpID0+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 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC5taW4uanMiLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsVUFDUixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsU0FBVUosR0FDUSxpQkFBWkMsUUFDZEEsUUFBc0MsNkJBQUlELEVBQVFHLFFBQVEsVUFFMURKLEVBQW1DLDZCQUFJQyxFQUFRRCxFQUFZLE1BQzVELENBVEQsQ0FTR08sS0FBT0MsRyx5S0NUVixrQkFDQSxZQUlNQyxFQUE4QixDQUNsQ0MsVUFBVyxHQUNYQyxNQUFPLENBQUMsR0FHSkMsRUFDSkMsSUFFQSxNQUFNLFNBQUVDLEVBQVEsU0FBRUMsRUFBUSxVQUFFTCxLQUFjTSxHQUFTLElBQUtQLEtBQWdDSSxHQUV4RixPQUNFLGtDQUNFSSxLQUFLLFNBQ0xQLFVBQVcsMENBQTBDQSxJQUNyRFEsUUFBUyxJQUFNSixPQUNYRSxHQUVIRCxJQUtQSCxFQUFnQk8sVUFBWSxDQUMxQkosU0FBVSxVQUFVSyxLQUFLQyxXQUN6QlAsU0FBVSxVQUFVUSxLQUFLRCxXQUN6QlgsVUFBVyxVQUFVYSxPQUNyQlosTUFBTyxVQUFVYSxRQUduQixVQUFlWixDLDhKQ2xDZixrQkFDQSxZQUdNYSxFQUFjLEVBQ2xCQyxVQUNBQyxPQUFPLFFBQ1BqQixZQUFZLE1BRVosa0NBQVFBLFVBQVcsbUJBQW1CQSxJQUFhUSxRQUFTUSxHQUN6REMsR0FJTEYsRUFBWU4sVUFBWSxDQUN0Qk8sUUFBUyxVQUFVSixLQUFLRCxXQUN4QlgsVUFBVyxVQUFVYSxPQUNyQkksS0FBTSxVQUFVSixRQVFsQixVQUFlRSxDLCtKQ3pCZixrQkFDQSxZQUlNRyxFQUFhLEVBQ2pCQyxVQUNBQyxpQkFDQUMsVUFDQUMsZUFBZSxHQUNmdEIsWUFB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dkIsR0FBMEIsaUJBQWZnTyxXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU92SCxNQUFRLElBQUl3SCxTQUFTLGNBQWIsRUFDaEIsQ0FBRSxNQUFPM04sR0FDUixHQUFzQixpQkFBWE0sT0FBcUIsT0FBT0EsTUFDeEMsQ0FDQSxDQVB1QixHQ0dFK00sRUFBb0IsSSIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL2Nzdi9idXR0b24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9zZWFyY2gvY2xlYXItYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY29sdW1uLXRvZ2dsZS90b2dnbGUtbGlzdC50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZpbGUtc2F2ZXIvZGlzdC9GaWxlU2F2ZXIubWluLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jc3YvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9jc3YvZXhwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL29wL2luZGV4LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9zZWFyY2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9zcmMvY29sdW1uLXRvZ2dsZS9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctdG9vbGtpdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvc3JjL3NlYXJjaC9TZWFyY2hCYXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3N0YXRlbGVzc09wLnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy10b29sa2l0L3NyYy9vcC9jc3YudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXRvb2xraXQvcHJvdmlkZXIudHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJyZWFjdFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdUb29sa2l0XCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1Rvb2xraXRcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSk7XG59KShzZWxmLCAoX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18pID0+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
|
package/lib/context.d.ts
CHANGED
|
@@ -12,9 +12,6 @@ declare const ToolkitProvider_base: {
|
|
|
12
12
|
render(): React.ReactNode;
|
|
13
13
|
readonly props: Readonly<any>;
|
|
14
14
|
state: Readonly<{}>;
|
|
15
|
-
refs: {
|
|
16
|
-
[key: string]: React.ReactInstance;
|
|
17
|
-
};
|
|
18
15
|
componentDidMount?(): void;
|
|
19
16
|
shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): boolean;
|
|
20
17
|
componentWillUnmount?(): void;
|
|
@@ -39,9 +36,6 @@ declare const ToolkitProvider_base: {
|
|
|
39
36
|
render(): React.ReactNode;
|
|
40
37
|
readonly props: Readonly<any>;
|
|
41
38
|
state: Readonly<{}>;
|
|
42
|
-
refs: {
|
|
43
|
-
[key: string]: React.ReactInstance;
|
|
44
|
-
};
|
|
45
39
|
componentDidMount?(): void;
|
|
46
40
|
shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): boolean;
|
|
47
41
|
componentWillUnmount?(): void;
|
|
@@ -56,6 +50,7 @@ declare const ToolkitProvider_base: {
|
|
|
56
50
|
UNSAFE_componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): void;
|
|
57
51
|
};
|
|
58
52
|
contextType?: React.Context<any> | undefined;
|
|
53
|
+
propTypes?: any;
|
|
59
54
|
};
|
|
60
55
|
declare class ToolkitProvider extends ToolkitProvider_base {
|
|
61
56
|
_: any;
|
package/lib/index.d.ts
CHANGED
|
@@ -19,9 +19,6 @@ export declare const ToolkitContext: {
|
|
|
19
19
|
setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<any>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
|
|
20
20
|
forceUpdate(callback?: (() => void) | undefined): void;
|
|
21
21
|
readonly props: Readonly<any>;
|
|
22
|
-
refs: {
|
|
23
|
-
[key: string]: React.ReactInstance;
|
|
24
|
-
};
|
|
25
22
|
componentDidMount?(): void;
|
|
26
23
|
shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): boolean;
|
|
27
24
|
componentWillUnmount?(): void;
|
|
@@ -37,6 +34,7 @@ export declare const ToolkitContext: {
|
|
|
37
34
|
};
|
|
38
35
|
getDerivedStateFromProps(props: TableToolkitProps, state: any): any;
|
|
39
36
|
contextType?: React.Context<any> | undefined;
|
|
37
|
+
propTypes?: any;
|
|
40
38
|
};
|
|
41
39
|
Consumer: React.Consumer<ToolkitContextType>;
|
|
42
40
|
};
|
|
@@ -88,7 +86,7 @@ export interface TableToolkitProps<T extends object = any> {
|
|
|
88
86
|
data: T[];
|
|
89
87
|
ref?: any;
|
|
90
88
|
columns: Array<ColumnDescription<T>>;
|
|
91
|
-
children: (props: ToolkitContextType) =>
|
|
89
|
+
children: (props: ToolkitContextType) => React.ReactElement;
|
|
92
90
|
exportCSV?: boolean | CSVProps | undefined;
|
|
93
91
|
columnToggle?: {
|
|
94
92
|
[dataField: string]: boolean;
|
package/lib/src/op/csv.d.ts
CHANGED
|
@@ -10,9 +10,6 @@ declare const _default: (Base: any) => {
|
|
|
10
10
|
render(): React.ReactNode;
|
|
11
11
|
readonly props: Readonly<any>;
|
|
12
12
|
state: Readonly<{}>;
|
|
13
|
-
refs: {
|
|
14
|
-
[key: string]: React.ReactInstance;
|
|
15
|
-
};
|
|
16
13
|
componentDidMount?(): void;
|
|
17
14
|
shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): boolean;
|
|
18
15
|
componentWillUnmount?(): void;
|
|
@@ -36,9 +33,6 @@ declare const _default: (Base: any) => {
|
|
|
36
33
|
render(): React.ReactNode;
|
|
37
34
|
readonly props: Readonly<any>;
|
|
38
35
|
state: Readonly<{}>;
|
|
39
|
-
refs: {
|
|
40
|
-
[key: string]: React.ReactInstance;
|
|
41
|
-
};
|
|
42
36
|
componentDidMount?(): void;
|
|
43
37
|
shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): boolean;
|
|
44
38
|
componentWillUnmount?(): void;
|
|
@@ -53,5 +47,6 @@ declare const _default: (Base: any) => {
|
|
|
53
47
|
UNSAFE_componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): void;
|
|
54
48
|
};
|
|
55
49
|
contextType?: React.Context<any> | undefined;
|
|
50
|
+
propTypes?: any;
|
|
56
51
|
};
|
|
57
52
|
export default _default;
|
package/lib/src/op/index.d.ts
CHANGED
|
@@ -11,9 +11,6 @@ declare const _default: {
|
|
|
11
11
|
render(): React.ReactNode;
|
|
12
12
|
readonly props: Readonly<any>;
|
|
13
13
|
state: Readonly<{}>;
|
|
14
|
-
refs: {
|
|
15
|
-
[key: string]: React.ReactInstance;
|
|
16
|
-
};
|
|
17
14
|
componentDidMount?(): void;
|
|
18
15
|
shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): boolean;
|
|
19
16
|
componentWillUnmount?(): void;
|
|
@@ -37,9 +34,6 @@ declare const _default: {
|
|
|
37
34
|
render(): React.ReactNode;
|
|
38
35
|
readonly props: Readonly<any>;
|
|
39
36
|
state: Readonly<{}>;
|
|
40
|
-
refs: {
|
|
41
|
-
[key: string]: React.ReactInstance;
|
|
42
|
-
};
|
|
43
37
|
componentDidMount?(): void;
|
|
44
38
|
shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): boolean;
|
|
45
39
|
componentWillUnmount?(): void;
|
|
@@ -54,6 +48,7 @@ declare const _default: {
|
|
|
54
48
|
UNSAFE_componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): void;
|
|
55
49
|
};
|
|
56
50
|
contextType?: React.Context<any> | undefined;
|
|
51
|
+
propTypes?: any;
|
|
57
52
|
};
|
|
58
53
|
};
|
|
59
54
|
export default _default;
|
|
@@ -106,7 +106,7 @@ var SearchBar = /*#__PURE__*/function (_react_1$default$Comp) {
|
|
|
106
106
|
className: "sr-only"
|
|
107
107
|
}, searchText), react_1["default"].createElement("input", {
|
|
108
108
|
ref: function ref(n) {
|
|
109
|
-
|
|
109
|
+
_this3.input = n;
|
|
110
110
|
},
|
|
111
111
|
id: "search-bar-".concat(tableId),
|
|
112
112
|
type: "text",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBar.js","sourceRoot":"","sources":["SearchBar.tsx"],"names":[],"mappings":";;;;;AAAA,yBAAyB;AACzB,gCAAgC;AAChC,kDAA0B;AAG1B,MAAM,cAAc,GAAG,CACrB,IAAO,EACP,IAAY,EACZ,SAAmB,EACnB,EAAE;IACF,IAAI,OAAmC,CAAC;IAExC,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,OAAO,GAAG,SAAS,CAAC;YAEpB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,OAAO,CAAC;QAEtC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEtB,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;QAEvC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAMF,MAAM,SAAU,SAAQ,eAAK,CAAC,SAAyC;IAGrE,YAAY,KAAqB;QAC/B,KAAK,CAAC,KAAK,CAAC,CAAC;QAHf,UAAK,GAA4B,IAAI,CAAC;QAStC,kBAAa,GAAG,CAAC,CAAM,EAAE,EAAE;YACzB,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC;QAEF,YAAO,GAAG,GAAG,EAAE;YACb,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAY,CAAC;YACpD,MAAM,gBAAgB,GAAG,cAAc,CAAC,GAAG,EAAE;gBAC3C,QAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACrC,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,gBAAgB,EAAE,CAAC;QACrB,CAAC,CAAC;QAfA,IAAI,CAAC,KAAK,GAAG;YACX,KAAK,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;SAC9B,CAAC;IACJ,CAAC;IAcD,kBAAkB,CAAC,SAAyB;QAC1C,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,MAAM;QACJ,MAAM,EACJ,SAAS,GAAG,EAAE,EACd,KAAK,GAAG,EAAE,EACV,WAAW,GAAG,QAAQ,EACtB,OAAO,GAAG,GAAG,EACb,UAAU,GAAG,mBAAmB,GACjC,GAAG,IAAI,CAAC,KAAY,CAAC;QAEtB,OAAO,CACL,yCAAO,OAAO,EAAE,cAAc,OAAO,EAAE,EAAE,SAAS,EAAC,cAAc;YAC/D,wCAAM,EAAE,EAAE,cAAc,OAAO,QAAQ,EAAE,SAAS,EAAC,SAAS,IACzD,UAAU,CACN;YACP,yCACE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"SearchBar.js","sourceRoot":"","sources":["SearchBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -24,9 +24,6 @@ declare const _default: (options?: TableSearchProps) => (_: any, isRemoteSearch:
|
|
|
24
24
|
forceUpdate(callback?: (() => void) | undefined): void;
|
|
25
25
|
readonly props: Readonly<SearchProviderProps>;
|
|
26
26
|
state: Readonly<SearchProviderState>;
|
|
27
|
-
refs: {
|
|
28
|
-
[key: string]: React.ReactInstance;
|
|
29
|
-
};
|
|
30
27
|
componentDidMount?(): void;
|
|
31
28
|
shouldComponentUpdate?(nextProps: Readonly<SearchProviderProps>, nextState: Readonly<SearchProviderState>, nextContext: any): boolean;
|
|
32
29
|
componentWillUnmount?(): void;
|
|
@@ -40,6 +37,7 @@ declare const _default: (options?: TableSearchProps) => (_: any, isRemoteSearch:
|
|
|
40
37
|
UNSAFE_componentWillUpdate?(nextProps: Readonly<SearchProviderProps>, nextState: Readonly<SearchProviderState>, nextContext: any): void;
|
|
41
38
|
};
|
|
42
39
|
contextType?: React.Context<any> | undefined;
|
|
40
|
+
propTypes?: any;
|
|
43
41
|
};
|
|
44
42
|
Consumer: React.Consumer<any>;
|
|
45
43
|
};
|
package/lib/statelessOp.d.ts
CHANGED
|
@@ -11,9 +11,6 @@ declare const _default: (Base: any) => {
|
|
|
11
11
|
render(): React.ReactNode;
|
|
12
12
|
readonly props: Readonly<any>;
|
|
13
13
|
state: Readonly<{}>;
|
|
14
|
-
refs: {
|
|
15
|
-
[key: string]: React.ReactInstance;
|
|
16
|
-
};
|
|
17
14
|
componentDidMount?(): void;
|
|
18
15
|
shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): boolean;
|
|
19
16
|
componentWillUnmount?(): void;
|
|
@@ -38,9 +35,6 @@ declare const _default: (Base: any) => {
|
|
|
38
35
|
render(): React.ReactNode;
|
|
39
36
|
readonly props: Readonly<any>;
|
|
40
37
|
state: Readonly<{}>;
|
|
41
|
-
refs: {
|
|
42
|
-
[key: string]: React.ReactInstance;
|
|
43
|
-
};
|
|
44
38
|
componentDidMount?(): void;
|
|
45
39
|
shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): boolean;
|
|
46
40
|
componentWillUnmount?(): void;
|
|
@@ -55,5 +49,6 @@ declare const _default: (Base: any) => {
|
|
|
55
49
|
UNSAFE_componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<{}>, nextContext: any): void;
|
|
56
50
|
};
|
|
57
51
|
contextType?: React.Context<any> | undefined;
|
|
52
|
+
propTypes?: any;
|
|
58
53
|
};
|
|
59
54
|
export default _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-bootstrap-table-ng-toolkit",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.19.1",
|
|
4
4
|
"description": "The toolkit for react-bootstrap-table-ng",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -45,16 +45,16 @@
|
|
|
45
45
|
}
|
|
46
46
|
],
|
|
47
47
|
"peerDependencies": {
|
|
48
|
-
"prop-types": "
|
|
49
|
-
"react": "^18.
|
|
50
|
-
"react-dom": "^18.
|
|
48
|
+
"prop-types": ">=15.8.1",
|
|
49
|
+
"react": "^18.0 || ^18.0.0 || ^19.0 || ^19.0.0",
|
|
50
|
+
"react-dom": "^18.0 || ^18.0.0 || ^19.0 || ^19.0.0"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"file-saver": "^2.0.5",
|
|
54
|
-
"react-bootstrap-table-ng": "^4.
|
|
54
|
+
"react-bootstrap-table-ng": "^4.19.1"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@types/file-saver": "^2.0.5"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "24022dc8281117b928db32c4a90bcc9edc402edf"
|
|
60
60
|
}
|