react-bootstrap-table-ng-paginator 5.19.2 → 5.19.3
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/dist/react-bootstrap-table-ng-paginator.js +2 -2
- package/dist/react-bootstrap-table-ng-paginator.min.js +2 -2
- package/lib/index.d.ts +4 -72
- package/lib/index.js +45 -5
- package/lib/index.js.map +1 -1
- package/lib/src/data-context.d.ts +1 -77
- package/lib/src/data-context.js +76 -99
- package/lib/src/data-context.js.map +1 -1
- package/lib/src/hooks/usePagination.d.ts +33 -0
- package/lib/src/hooks/usePagination.js +213 -0
- package/lib/src/hooks/usePagination.js.map +1 -0
- package/lib/src/hooks/usePaginationState.d.ts +16 -0
- package/lib/src/hooks/usePaginationState.js +167 -0
- package/lib/src/hooks/usePaginationState.js.map +1 -0
- package/lib/src/page-button.d.ts +2 -6
- package/lib/src/page-button.js +26 -95
- package/lib/src/page-button.js.map +1 -1
- package/lib/src/pagination-handler.d.ts +1 -42
- package/lib/src/pagination-handler.js +44 -152
- package/lib/src/pagination-handler.js.map +1 -1
- package/lib/src/pagination-list-adapter.d.ts +2 -152
- package/lib/src/pagination-list-adapter.js +54 -83
- package/lib/src/pagination-list-adapter.js.map +1 -1
- package/lib/src/pagination-list-standalone.d.ts +1 -1
- package/lib/src/pagination-total-adapter.d.ts +2 -152
- package/lib/src/pagination-total-adapter.js +50 -78
- package/lib/src/pagination-total-adapter.js.map +1 -1
- package/lib/src/pagination-total-standalone.d.ts +1 -1
- package/lib/src/pagination.d.ts +2 -43
- package/lib/src/pagination.js +135 -199
- package/lib/src/pagination.js.map +1 -1
- package/lib/src/size-per-page-dropdown-adapter.d.ts +2 -92
- package/lib/src/size-per-page-dropdown-adapter.js +94 -88
- package/lib/src/size-per-page-dropdown-adapter.js.map +1 -1
- package/lib/src/size-per-page-dropdown-standalone.d.ts +1 -1
- package/lib/src/size-per-page-dropdown.js +2 -1
- package/lib/src/size-per-page-dropdown.js.map +1 -1
- package/lib/src/size-per-page-option.js +6 -0
- package/lib/src/size-per-page-option.js.map +1 -1
- package/lib/src/standalone-adapter.d.ts +1 -1
- package/lib/src/standalone-adapter.js +52 -13
- package/lib/src/standalone-adapter.js.map +1 -1
- package/lib/src/state-context.d.ts +3 -52
- package/lib/src/state-context.js +26 -195
- package/lib/src/state-context.js.map +1 -1
- package/package.json +3 -3
- package/lib/src/page-resolver.d.ts +0 -78
- package/lib/src/page-resolver.js +0 -199
- package/lib/src/page-resolver.js.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see react-bootstrap-table-ng-paginator.js.LICENSE.txt */
|
|
2
|
-
!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.ReactBootstrapTableNgPaginator=t(require("react")):e.ReactBootstrapTableNgPaginator=t(e.React)}(self,e=>{return t={7(e){"use strict";var t,a="object"==typeof Reflect?Reflect:null,n=a&&"function"==typeof a.apply?a.apply:function(e,t,a){return Function.prototype.apply.call(e,t,a)};t=a&&"function"==typeof a.ownKeys?a.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise(function(a,n){function r(a){e.removeListener(t,i),n(a)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",r),a([].slice.call(arguments))}f(e,t,i,{once:!0}),"error"!==t&&function(e,t,a){"function"==typeof e.on&&f(e,"error",t,a)}(e,r,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var o=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,a,n){var r,i,o,u;if(s(a),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,a.listener?a.listener:a),i=e._events),o=i[t]),void 0===o)o=i[t]=a,++e._eventsCount;else if("function"==typeof o?o=i[t]=n?[a,o]:[o,a]:n?o.unshift(a):o.push(a),(r=l(e))>0&&o.length>r&&!o.warned){o.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=o.length,u=d,console&&console.warn&&console.warn(u)}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,a){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:a},r=d.bind(n);return r.listener=a,n.wrapFn=r,r}function g(e,t,a){var n=e._events;if(void 0===n)return[];var r=n[t];return void 0===r?[]:"function"==typeof r?a?[r.listener||r]:[r]:a?function(e){for(var t=new Array(e.length),a=0;a<t.length;++a)t[a]=e[a].listener||e[a];return t}(r):P(r,r.length)}function c(e){var t=this._events;if(void 0!==t){var a=t[e];if("function"==typeof a)return 1;if(void 0!==a)return a.length}return 0}function P(e,t){for(var a=new Array(t),n=0;n<t;++n)a[n]=e[n];return a}function f(e,t,a,n){if("function"==typeof e.on)n.once?e.once(t,a):e.on(t,a);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function r(i){n.once&&e.removeEventListener(t,r),a(i)})}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");o=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return l(this)},i.prototype.emit=function(e){for(var t=[],a=1;a<arguments.length;a++)t.push(arguments[a]);var r="error"===e,i=this._events;if(void 0!==i)r=r&&void 0===i.error;else if(!r)return!1;if(r){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)n(l,this,t);else{var u=l.length,d=P(l,u);for(a=0;a<u;++a)n(d[a],this,t)}return!0},i.prototype.addListener=function(e,t){return u(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return u(this,e,t,!0)},i.prototype.once=function(e,t){return s(t),this.on(e,p(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,p(this,e,t)),this},i.prototype.removeListener=function(e,t){var a,n,r,i,o;if(s(t),void 0===(n=this._events))return this;if(void 0===(a=n[e]))return this;if(a===t||a.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,a.listener||t));else if("function"!=typeof a){for(r=-1,i=a.length-1;i>=0;i--)if(a[i]===t||a[i].listener===t){o=a[i].listener,r=i;break}if(r<0)return this;0===r?a.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(a,r),1===a.length&&(n[e]=a[0]),void 0!==n.removeListener&&this.emit("removeListener",e,o||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,a,n;if(void 0===(a=this._events))return this;if(void 0===a.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==a[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete a[e]),this;if(0===arguments.length){var r,i=Object.keys(a);for(n=0;n<i.length;++n)"removeListener"!==(r=i[n])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=a[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},i.prototype.listeners=function(e){return g(this,e,!0)},i.prototype.rawListeners=function(e){return g(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):c.call(e,t)},i.prototype.listenerCount=c,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},987(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SizePerPageDropdownStandalone=t.PaginationTotalStandalone=t.PaginationListStandalone=t.PaginationProvider=void 0;const r=n(a(442)),i=n(a(320)),o=n(a(657));t.PaginationListStandalone=o.default;const s=n(a(991));t.PaginationTotalStandalone=s.default;const l=n(a(429));t.SizePerPageDropdownStandalone=l.default;const u=n(a(973));t.default=(e={})=>({createContext:i.default,options:e});const{Provider:d,Consumer:p}=(0,u.default)();t.PaginationProvider=e=>r.default.createElement(d,{...e},r.default.createElement(p,null,t=>e.children(t)))},971(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={PAGINATION_SIZE:5,PAGE_START_INDEX:1,With_FIRST_AND_LAST:!0,SHOW_ALL_PAGE_BTNS:!1,SHOW_TOTAL:!1,PAGINATION_TOTAL:null,FIRST_PAGE_TEXT:"<<",PRE_PAGE_TEXT:"<",NEXT_PAGE_TEXT:">",LAST_PAGE_TEXT:">>",NEXT_PAGE_TITLE:"next page",LAST_PAGE_TITLE:"last page",PRE_PAGE_TITLE:"previous page",FIRST_PAGE_TITLE:"first page",SIZE_PER_PAGE_LIST:[10,25,30,50],HIDE_SIZE_PER_PAGE:!1,HIDE_PAGE_LIST_ONLY_ONE_PAGE:!1}},320(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(971)),o=a(933),s=n(a(38)),l=n(a(973)),{Provider:u}=(0,l.default)(),d=r.default.createContext(null);class p extends u{componentDidUpdate(e){super.componentDidUpdate(e);const{currSizePerPage:t}=this,{custom:a,onPageChange:n}=e.pagination.options,r=void 0!==e.pagination.options.pageStartIndex?e.pagination.options.pageStartIndex:i.default.PAGE_START_INDEX;if(!this.isRemotePagination()&&!a){const a=(0,o.alignPage)(e.data.length,this.props.data.length,this.currPage,t,r);this.currPage!==a&&(n&&n(a,t),this.currPage=a)}e.onDataSizeChange&&e.data.length!==this.props.data.length&&e.onDataSizeChange({dataSize:this.props.data.length})}isRemotePagination=()=>this.props.isRemotePagination();renderDefaultPagination=()=>{if(!this.props.pagination.options.custom){const{page:e,sizePerPage:t,dataSize:a,...n}=this.getPaginationProps();return r.default.createElement(s.default,{...n,key:"pagination",dataSize:a||this.props.data.length,currPage:e,currSizePerPage:t})}return null};render(){const e=this.props.pagination.options,t=e.sizePerPage??this.currSizePerPage,a=void 0===e.pageStartIndex?i.default.PAGE_START_INDEX:e.pageStartIndex;let{data:n}=this.props,s=e.page??this.currPage;if(!this.isRemotePagination()&&n.length<=(s-1)*t){const e=Math.floor(n.length/t)+1;s=s>e?e:s,this.currPage=s}return this.isRemotePagination()&&(this.currPage=s),n=this.isRemotePagination()?n:(0,o.getByCurrPage)(n,s,t,a),r.default.createElement(d.Provider,{value:{data:n,setRemoteEmitter:this.setPaginationRemoteEmitter}},this.props.children,this.renderDefaultPagination())}}t.default=()=>({Provider:p,Consumer:d.Consumer})},374(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(a(942)),u=o(a(442));class d extends u.Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}handleClick(e){e.preventDefault(),this.props.onPageChange(this.props.page)}render(){const{page:e,title:t,active:a,disabled:n,className:r}=this.props,i=(0,l.default)({active:a,disabled:n,"page-item":!0},r);return u.default.createElement("li",{className:i,title:t},u.default.createElement("a",{href:"#",onClick:this.handleClick,className:"page-link"},e))}}t.default=d},316(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(971));t.default=e=>class extends r.default.Component{backToPrevPage(){const{currPage:e,pageStartIndex:t}=this.props;return e-1<t?t:e-1}initialState(){const e=this.calculateTotalPage();return{totalPages:e,lastPage:this.calculateLastPage(e)}}calculateTotalPage(e=this.props.currSizePerPage,t=this.props.dataSize){return Math.ceil(t/e)}calculateLastPage(e){const{pageStartIndex:t}=this.props;return t+e-1}calculateFromTo(){const{dataSize:e,currPage:t,currSizePerPage:a,pageStartIndex:n}=this.props,r=Math.abs(i.default.PAGE_START_INDEX-n);let o=(t-n)*a;o=0===e?0:o+1;let s=Math.min(a*(t+r),e);return s>e&&(s=e),[o,s]}calculatePages(e,t){const{currPage:a,paginationSize:n,pageStartIndex:r,withFirstAndLast:i,firstPageText:o,prePageText:s,nextPageText:l,lastPageText:u,alwaysShowAllBtns:d}=this.props;let p=[],g=e;if(g<=0)return[];let c=Math.max(a-Math.floor(n/2),r);g=c+n-1,g>t&&(g=t,c=g-n+1),d&&(p=i?[o,s]:[s]),c!==r&&e>n&&i&&0===p.length?p=[o,s]:e>1&&0===p.length&&(p=[s]);for(let e=c;e<=g;e+=1)e>=r&&p.push(e);return(d||g<=t&&p.length>1)&&p.push(l),(g!==t&&i||i&&d)&&p.push(u),p}calculatePageStatus(e=[],t,a=!1){const{currPage:n,pageStartIndex:r,firstPageText:i,prePageText:o,nextPageText:s,lastPageText:l,alwaysShowAllBtns:u}=this.props,d=e=>n===r&&(e===i||e===o),p=e=>n===t&&(e===s||e===l);return e.filter(e=>!!u||!(d(e)||p(e))).map(e=>{let t;const r=e===n,u=d(e)||p(e);t=e===s?this.props.nextPageTitle:e===o?this.props.prePageTitle:e===i?this.props.firstPageTitle:e===l?this.props.lastPageTitle:`${e}`;const g={page:e,active:r,disabled:u,title:t};return a||(g.title=t),g})}calculateSizePerPageStatus(){const{sizePerPageList:e}=this.props;return e.map(e=>({text:`${void 0!==e.text?e.text:e}`,page:void 0!==e.value?e.value:e}))}}},933(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getByCurrPage=t.alignPage=void 0;const r=n(a(971)),i=(e,t,a)=>((e,t)=>e+Math.abs(1-t))(e,a)*t-1;t.alignPage=(e,t,a,n,i)=>t<e?a:a<i||e<=0?i:a>=Math.floor(e/n)+i&&1===i?Math.ceil(e/n):a>=Math.floor(e/n)&&0===i?Math.ceil(e/n)-Math.abs(r.default.PAGE_START_INDEX-i):a,t.getByCurrPage=(e,t,a,n)=>{const r=e.length;if(!r)return[];const o=i(t,a,n),s=((e,t)=>e-(t-1))(o,a),l=[];for(let t=s;t<=o&&(l.push(e[t]),t+1!==r);t+=1);return l}},881(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=o(a(442)),u=s(a(316));t.default=e=>class extends((0,u.default)(l.Component)){constructor(e){super(e),this.handleChangePage=this.handleChangePage.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this),this.state=this.initialState()}componentDidUpdate(e){const{currSizePerPage:t,dataSize:a,totalSize:n}=e;let r=0;t!==this.props.currSizePerPage||a!==this.props.dataSize||n!==this.props.totalSize?t!==this.props.currSizePerPage?r=this.calculateTotalPage(this.props.currSizePerPage,this.props.totalSize??this.props.dataSize):a!==this.props.dataSize?r=this.calculateTotalPage(this.props.currSizePerPage,this.props.dataSize):n!==this.props.totalSize&&(r=this.calculateTotalPage(this.props.currSizePerPage,this.props.totalSize)):r=this.calculateTotalPage(this.props.currSizePerPage,this.props.dataSize);const i=this.calculateLastPage(r);r===this.state.totalPages&&i===this.state.lastPage||this.setState({totalPages:r,lastPage:i})}handleChangeSizePerPage(e){const{currSizePerPage:t,onSizePerPageChange:a}=this.props,n="string"==typeof e?parseInt(e,10):e;let{currPage:r}=this.props;if(n!==t){const e=this.calculateTotalPage(n),t=this.calculateLastPage(e);r>t&&(r=t),a(n,r)}}handleChangePage(e){let t;const{currPage:a,pageStartIndex:n,prePageText:r,nextPageText:i,lastPageText:o,firstPageText:s,onPageChange:l}=this.props,{lastPage:u}=this.state;t=e===r?this.backToPrevPage():e===i?a+1>u?u:a+1:e===o?u:e===s?n:parseInt(e,10),t!==a&&l(t)}render(){return l.default.createElement(e,{...this.props,lastPage:this.state.lastPage,totalPages:this.state.totalPages,onPageChange:this.handleChangePage,onSizePerPageChange:this.handleChangeSizePerPage})}}},147(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PaginationListWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(285)),p=e=>class extends((0,u.default)(l.Component)){render(){const{lastPage:t,totalPages:a,pageButtonRenderer:n,onPageChange:r,disablePageTitle:i,hidePageListOnlyOnePage:o}=this.props,s=this.calculatePageStatus(this.calculatePages(a,t),t,i);return 1===a&&o?null:l.default.createElement(e,{pageButtonRenderer:n,onPageChange:r,pages:s})}};t.PaginationListWithAdapter=p(d.default),t.default=p},657(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(285)),s=n(a(147)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},285(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(374));t.default=e=>r.default.createElement("ul",{className:"pagination react-bootstrap-table-page-btns-ul"},e.pages.map(t=>{if(e.pageButtonRenderer){const a=e.pageButtonRenderer({...t,onPageChange:e.onPageChange});return a?r.default.cloneElement(a,{key:t.page}):null}return r.default.createElement(i.default,{key:t.page,...t,onPageChange:e.onPageChange})}))},681(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PaginationTotalWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(519)),p=e=>class extends((0,u.default)(l.Component)){render(){const[t,a]=this.calculateFromTo();return l.default.createElement(e,{from:t,to:a,dataSize:this.props.dataSize,paginationTotalRenderer:this.props.paginationTotalRenderer})}};t.PaginationTotalWithAdapter=p(d.default),t.default=p},991(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(519)),o=n(a(681)),s=n(a(885));t.default=(0,s.default)((0,o.default)(e=>r.default.createElement(i.default,{...e})))},519(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=e=>e.paginationTotalRenderer?e.paginationTotalRenderer(e.from,e.to,e.dataSize):r.default.createElement("span",{className:"react-bootstrap-table-pagination-total"}," Showing rows ",e.from," to ",e.to," of ",e.dataSize)},38(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const l=s(a(942)),u=o(a(442)),d=s(a(971)),p=s(a(316)),g=s(a(881)),c=a(147),P=a(681),f=a(527);class h extends((0,p.default)(u.Component)){render(){const{tableId:e,currPage:t,pageStartIndex:a=d.default.PAGE_START_INDEX,showTotal:n=d.default.SHOW_TOTAL,dataSize:r,pageListRenderer:i=null,pageButtonRenderer:o=null,paginationTotalRenderer:s=d.default.PAGINATION_TOTAL,hidePageListOnlyOnePage:p=d.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE,totalPages:g,lastPage:h,onPageChange:_,sizePerPageList:v=d.default.SIZE_PER_PAGE_LIST,currSizePerPage:S,hideSizePerPage:T=d.default.HIDE_SIZE_PER_PAGE,sizePerPageRenderer:m=null,sizePerPageOptionRenderer:E=null,onSizePerPageChange:b,bootstrap4:y=!1,bootstrap5:O=!1,disablePageTitle:A=!1,paginationSize:z=d.default.PAGINATION_SIZE,withFirstAndLast:L=d.default.With_FIRST_AND_LAST,alwaysShowAllBtns:x=d.default.SHOW_ALL_PAGE_BTNS,firstPageText:w=d.default.FIRST_PAGE_TEXT,prePageText:I=d.default.PRE_PAGE_TEXT,nextPageText:C=d.default.NEXT_PAGE_TEXT,lastPageText:R=d.default.LAST_PAGE_TEXT,nextPageTitle:D=d.default.NEXT_PAGE_TITLE,prePageTitle:j=d.default.PRE_PAGE_TITLE,firstPageTitle:M=d.default.FIRST_PAGE_TITLE,lastPageTitle:N=d.default.LAST_PAGE_TITLE,...G}=this.props,B=this.calculatePageStatus(this.calculatePages(g,h),h),X=(0,l.default)("react-bootstrap-table-pagination-list","col-md-6 col-xs-6 col-6 col-sm-6 col-lg-6",{"react-bootstrap-table-pagination-list-hidden":p&&1===g});return u.default.createElement("div",{className:"row react-bootstrap-table-pagination"},u.default.createElement("div",{className:"col-md-6 col-xs-6 col-6 col-sm-6 col-lg-6"},u.default.createElement(f.SizePerPageDropdownWithAdapter,{bootstrap4:y,bootstrap5:O,tableId:e,sizePerPageList:v,currSizePerPage:S,hideSizePerPage:T,sizePerPageRenderer:m,sizePerPageOptionRenderer:E,onSizePerPageChange:b}),n?u.default.createElement(P.PaginationTotalWithAdapter,{currPage:t,currSizePerPage:S,pageStartIndex:a,dataSize:r,paginationTotalRenderer:s}):null),i?i({pages:B,onPageChange:_}):u.default.createElement("div",{className:X},u.default.createElement(c.PaginationListWithAdapter,{...G,currPage:t,currSizePerPage:S,pageStartIndex:a,lastPage:h,totalPages:g,pageButtonRenderer:o,onPageChange:_,paginationSize:z,withFirstAndLast:L,firstPageText:w,prePageText:I,nextPageText:C,lastPageText:R,alwaysShowAllBtns:x})))}static defaultProps={disablePageTitle:!1,bootstrap4:!1,bootstrap5:!1,pageStartIndex:d.default.PAGE_START_INDEX,paginationSize:d.default.PAGINATION_SIZE,withFirstAndLast:d.default.With_FIRST_AND_LAST,alwaysShowAllBtns:d.default.SHOW_ALL_PAGE_BTNS,showTotal:d.default.SHOW_TOTAL,pageListRenderer:null,pageButtonRenderer:null,sizePerPageRenderer:null,paginationTotalRenderer:d.default.PAGINATION_TOTAL,sizePerPageOptionRenderer:null,firstPageText:d.default.FIRST_PAGE_TEXT,prePageText:d.default.PRE_PAGE_TEXT,nextPageText:d.default.NEXT_PAGE_TEXT,lastPageText:d.default.LAST_PAGE_TEXT,sizePerPageList:d.default.SIZE_PER_PAGE_LIST,nextPageTitle:d.default.NEXT_PAGE_TITLE,prePageTitle:d.default.PRE_PAGE_TITLE,firstPageTitle:d.default.FIRST_PAGE_TITLE,lastPageTitle:d.default.LAST_PAGE_TITLE,hideSizePerPage:d.default.HIDE_SIZE_PER_PAGE,hidePageListOnlyOnePage:d.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE}}t.default=(0,g.default)(h)},527(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SizePerPageDropdownWithAdapter=void 0;const l=o(a(442)),u=s(a(316)),d=s(a(609)),p=e=>class extends((0,u.default)(l.Component)){state={dropdownOpen:!1};constructor(e){super(e),this.closeDropDown=this.closeDropDown.bind(this),this.toggleDropDown=this.toggleDropDown.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this),this.state={dropdownOpen:!1}}toggleDropDown(){const e=!this.state.dropdownOpen;this.setState(()=>({dropdownOpen:e}))}closeDropDown(){this.setState(()=>({dropdownOpen:!1}))}handleChangeSizePerPage(e){this.props.onSizePerPageChange(e),this.closeDropDown()}render(){const{tableId:t,bootstrap4:a,bootstrap5:n,sizePerPageList:r,currSizePerPage:i,hideSizePerPage:o,sizePerPageRenderer:s,sizePerPageOptionRenderer:u}=this.props,{dropdownOpen:d}=this.state;return r.length>1&&!o?s?s({options:this.calculateSizePerPageStatus(),currSizePerPage:`${i}`,onSizePerPageChange:this.handleChangeSizePerPage}):l.default.createElement(e,{...this.props,currSizePerPage:`${i}`,options:this.calculateSizePerPageStatus(),optionRenderer:u,onSizePerPageChange:this.handleChangeSizePerPage,onClick:this.toggleDropDown,onBlur:this.closeDropDown,open:d,tableId:t,bootstrap4:a,bootstrap5:n}):null}};t.SizePerPageDropdownWithAdapter=p(d.default),t.default=p},429(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(609)),s=n(a(527)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},609(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(942)),i=n(a(442)),o=n(a(869)),s={open:!1,hidden:!1,btnContextual:"btn-default btn-secondary",variation:"dropdown",className:"",optionRenderer:null,bootstrap4:!1,bootstrap5:!1,tableId:null};t.default=e=>{const{open:t,tableId:a,hidden:n,onClick:l,onBlur:u,options:d,className:p,variation:g,bootstrap4:c,bootstrap5:P,btnContextual:f,optionRenderer:h,currSizePerPage:_,onSizePerPageChange:v}={...s,...e},S=t?"open show":"",T=(0,r.default)(S,"react-bs-table-sizePerPage-dropdown",g,p),m=a?`${a}-pageDropDown`:"pageDropDown";return i.default.createElement("span",{style:{visibility:n?"hidden":"visible"},className:T,"data-testid":"size-per-page-dropdown"},i.default.createElement("button",{id:m,type:"button",className:`btn ${f} dropdown-toggle`,"data-toggle":P?void 0:"dropdown","data-bs-toggle":P?"dropdown":void 0,"aria-expanded":t,onClick:l,onBlur:u},_," ",c||P?null:i.default.createElement("span",null,i.default.createElement("span",{className:"caret"}))),i.default.createElement("ul",{className:`dropdown-menu ${S}`,role:"menu","aria-labelledby":m},d.map(e=>h?h({...e,onSizePerPageChange:v}):i.default.createElement(o.default,{...e,key:e.text,bootstrap4:c,bootstrap5:P,onSizePerPageChange:v}))))}},869(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=({text:e,page:t,onSizePerPageChange:a,bootstrap4:n=!1,bootstrap5:i=!1})=>n||i?r.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem",className:"dropdown-item","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)}},e):r.default.createElement("li",{key:e,role:"presentation",className:"dropdown-item"},r.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)}},e))},885(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=e=>({page:t,sizePerPage:a,...n})=>r.default.createElement(e,{...n,currPage:t,currSizePerPage:a})},973(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(7)),i=n(a(442)),o=n(a(971)),s=a(933),l=i.default.createContext(null);class u extends i.default.Component{currPage;currSizePerPage;dataChangeListener;dataSize;remoteEmitter;constructor(e){let t,a;super(e),this.handleChangePage=this.handleChangePage.bind(this),this.handleDataSizeChange=this.handleDataSizeChange.bind(this),this.handleChangeSizePerPage=this.handleChangeSizePerPage.bind(this);const n=e.pagination.options,i=n.sizePerPageList||o.default.SIZE_PER_PAGE_LIST;t=void 0!==n.page?n.page:void 0!==n.pageStartIndex?n.pageStartIndex:o.default.PAGE_START_INDEX,a=void 0!==n.sizePerPage?n.sizePerPage:"object"==typeof i[0]?i[0].value:i[0],this.currPage=t,this.dataSize=n.totalSize,this.currSizePerPage=a,this.dataChangeListener=new r.default,this.dataChangeListener.on("filterChanged",this.handleDataSizeChange)}getPaginationProps=()=>{const{bootstrap4:e,tableId:t}=this.props,a=this.props.pagination.options,{currPage:n,currSizePerPage:r}=this;let i;i=this.isRemotePagination()?a.totalSize:this.dataSize;const s=void 0===a.withFirstAndLast?o.default.With_FIRST_AND_LAST:a.withFirstAndLast,l=void 0===a.alwaysShowAllBtns?o.default.SHOW_ALL_PAGE_BTNS:a.alwaysShowAllBtns,u=void 0===a.hideSizePerPage?o.default.HIDE_SIZE_PER_PAGE:a.hideSizePerPage,d=void 0===a.hidePageListOnlyOnePage?o.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE:a.hidePageListOnlyOnePage,p=void 0===a.pageStartIndex?o.default.PAGE_START_INDEX:a.pageStartIndex;return{...a,bootstrap4:e,tableId:t,page:n,sizePerPage:r,pageStartIndex:p,hidePageListOnlyOnePage:d,hideSizePerPage:u,alwaysShowAllBtns:l,withFirstAndLast:s,dataSize:i,sizePerPageList:a.sizePerPageList||o.default.SIZE_PER_PAGE_LIST,paginationSize:a.paginationSize||o.default.PAGINATION_SIZE,showTotal:a.showTotal,pageListRenderer:a.pageListRenderer,pageButtonRenderer:a.pageButtonRenderer,sizePerPageRenderer:a.sizePerPageRenderer,paginationTotalRenderer:a.paginationTotalRenderer,sizePerPageOptionRenderer:a.sizePerPageOptionRenderer,firstPageText:a.firstPageText||o.default.FIRST_PAGE_TEXT,prePageText:a.prePageText||o.default.PRE_PAGE_TEXT,nextPageText:a.nextPageText||o.default.NEXT_PAGE_TEXT,lastPageText:a.lastPageText||o.default.LAST_PAGE_TEXT,prePageTitle:a.prePageTitle||o.default.PRE_PAGE_TITLE,nextPageTitle:a.nextPageTitle||o.default.NEXT_PAGE_TITLE,firstPageTitle:a.firstPageTitle||o.default.FIRST_PAGE_TITLE,lastPageTitle:a.lastPageTitle||o.default.LAST_PAGE_TITLE,onPageChange:this.handleChangePage,onSizePerPageChange:this.handleChangeSizePerPage}};setPaginationRemoteEmitter=e=>{this.remoteEmitter=e};getPaginationRemoteEmitter=()=>this.remoteEmitter||this.props.remoteEmitter;componentDidUpdate(e){const{custom:t}=e.pagination.options;(this.isRemotePagination()||t)&&(e.pagination.options.page,e.pagination.options.sizePerPage,e.pagination.options.totalSize)}isRemotePagination=()=>{const e={result:void 0};return this.remoteEmitter?.emit("isRemotePagination",e),e.result};handleDataSizeChange(e){const t=this.props.pagination.options,a=void 0===t.pageStartIndex?o.default.PAGE_START_INDEX:t.pageStartIndex;this.currPage=(0,s.alignPage)(e,this.dataSize,this.currPage,this.currSizePerPage,a),this.dataSize=e,this.forceUpdate()}handleChangePage(e){const{currSizePerPage:t}=this,a=this.props.pagination.options;a.onPageChange&&a.onPageChange(e,t),this.currPage=e,this.isRemotePagination()?this.getPaginationRemoteEmitter().emit("paginationChange",e,t):this.forceUpdate()}handleChangeSizePerPage(e,t){const a=this.props.pagination.options;a.onSizePerPageChange&&a.onSizePerPageChange(e,t),this.currPage=t,this.currSizePerPage=e,this.isRemotePagination()?this.getPaginationRemoteEmitter().emit("paginationChange",t,e):this.forceUpdate()}render(){const e=this.getPaginationProps(),t={...this.props.pagination,options:e};return i.default.createElement(l.Provider,{value:{paginationProps:e,paginationTableProps:{pagination:t,setPaginationRemoteEmitter:this.setPaginationRemoteEmitter,dataChangeListener:this.dataChangeListener}}},this.props.children)}}t.default=()=>({Provider:u,Consumer:l.Consumer})},442(t){"use strict";t.exports=e},942(e,t){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e="",t=0;t<arguments.length;t++){var a=arguments[t];a&&(e=o(e,i(a)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return r.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var a in e)n.call(e,a)&&e[a]&&(t=o(t,a));return t}function o(e,t){return t?e?e+" "+t:e+t:e}e.exports?(r.default=r,e.exports=r):void 0===(a=function(){return r}.apply(t,[]))||(e.exports=a)}()}},a={},function e(n){var r=a[n];if(void 0!==r)return r.exports;var i=a[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(987);var t,a});
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3IuanMiLCJtYXBwaW5ncyI6IjtDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxFQUFRRyxRQUFRLFVBQ1IsbUJBQVhDLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxDQUFDLFNBQVVKLEdBQ1EsaUJBQVpDLFFBQ2RBLFFBQXdDLCtCQUFJRCxFQUFRRyxRQUFRLFVBRTVESixFQUFxQywrQkFBSUMsRUFBUUQsRUFBWSxNQUM5RCxDQVRELENBU0dPLEtBQU9DLElBQ1YsTyxxQkNhQSxJQU9JQyxFQVBBQyxFQUF1QixpQkFBWkMsUUFBdUJBLFFBQVUsS0FDNUNDLEVBQWVGLEdBQXdCLG1CQUFaQSxFQUFFRyxNQUM3QkgsRUFBRUcsTUFDRixTQUFzQkMsRUFBUUMsRUFBVUMsR0FDeEMsT0FBT0MsU0FBU0MsVUFBVUwsTUFBTU0sS0FBS0wsRUFBUUMsRUFBVUMsRUFDekQsRUFJQVAsRUFERUMsR0FBMEIsbUJBQWRBLEVBQUVVLFFBQ0NWLEVBQUVVLFFBQ1ZDLE9BQU9DLHNCQUNDLFNBQXdCUixHQUN2QyxPQUFPTyxPQUFPRSxvQkFBb0JULEdBQy9CVSxPQUFPSCxPQUFPQyxzQkFBc0JSLEdBQ3pDLEVBRWlCLFNBQXdCQSxHQUN2QyxPQUFPTyxPQUFPRSxvQkFBb0JULEVBQ3BDLEVBT0YsSUFBSVcsRUFBY0MsT0FBT0MsT0FBUyxTQUFxQkMsR0FDckQsT0FBT0EsR0FBVUEsQ0FDbkIsRUFFQSxTQUFTQyxJQUNQQSxFQUFhQyxLQUFLWCxLQUFLWSxLQUN6QixDQUNBNUIsRUFBT0QsUUFBVTJCLEVBQ2pCMUIsRUFBT0QsUUFBUThCLEtBd1lmLFNBQWNDLEVBQVNDLEdBQ3JCLE9BQU8sSUFBSUMsUUFBUSxTQUFVQyxFQUFTQyxHQUNwQyxTQUFTQyxFQUFjQyxHQUNyQk4sRUFBUU8s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QTJCLENBQUMsRUFHaEMsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQmxSLElBQWpCbVIsRUFDSCxPQUFPQSxFQUFhblUsUUFHckIsSUFBSUMsRUFBUytULEVBQXlCRSxHQUFZLENBR2pEbFUsUUFBUyxDQUFDLEdBT1gsT0FIQW9VLEVBQW9CRixHQUFValQsS0FBS2hCLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNpVSxHQUdwRWhVLEVBQU9ELE9BQ2YsQ0NuQjBCaVUsQ0FBb0IsSyxNREYxQ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3IvaW5kZXgudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL2NvbnN0LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL2RhdGEtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnZS1idXR0b24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2UtcmVzb2x2ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnZS50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWhhbmRsZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tbGlzdC1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWxpc3Qtc3RhbmRhbG9uZS50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi1saXN0LnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLXRvdGFsLWFkYXB0ZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tdG90YWwtc3RhbmRhbG9uZS50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi10b3RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zaXplLXBlci1wYWdlLWRyb3Bkb3duLXN0YW5kYWxvbmUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3NpemUtcGVyLXBhZ2Utb3B0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zdGFuZGFsb25lLWFkYXB0ZXIudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3N0YXRlLWNvbnRleHQudHN4Iiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJyZWFjdFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdQYWdpbmF0b3JcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RCb290c3RyYXBUYWJsZU5nUGFnaW5hdG9yXCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0pO1xufSkoc2VsZiwgKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fKSA9PiB7XG5yZXR1cm4gIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGFnaW5hdGlvbk9wdGlvbnMgfSBmcm9tIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nXCI7XG5cbmltcG9ydCBjcmVhdGVEYXRhQ29udGV4dCBmcm9tIFwiLi9zcmMvZGF0YS1jb250ZXh0XCI7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lIGZyb20gXCIuL3NyYy9wYWdpbmF0aW9uLWxpc3Qtc3RhbmRhbG9uZVwiO1xuaW1wb3J0IFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUgZnJvbSBcIi4vc3JjL3BhZ2luYXRpb24tdG90YWwtc3RhbmRhbG9uZVwiO1xuaW1wb3J0IFNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lIGZyb20gXCIuL3NyYy9zaXplLXBlci1wYWdlLWRyb3Bkb3duLXN0YW5kYWxvbmVcIjtcbmltcG9ydCBjcmVhdGVCYXNlQ29udGV4dCBmcm9tIFwiLi9zcmMvc3RhdGUtY29udGV4dFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25DdHhPcHRpb25zIHtcbiAgb3B0aW9ucz86IFBhZ2luYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25DaGlsZFByb3BzIGV4dGVuZHMgUGFnaW5hdGlvbk9wdGlvbnMge1xuICB0YWJsZUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBib290c3RyYXA0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcyB7XG4gIHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uQ3R4T3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgLy8gVE9ET1xuICAvLyBjaGlsZHJlbjogKGNoaWxkUHJvcHM6IHtcbiAgLy8gICBwYWdpbmF0aW9uUHJvcHM6IFBhZ2luYXRpb25DaGlsZFByb3BzO1xuICAvLyAgIHBhZ2luYXRpb25UYWJsZVByb3BzOiBCb290c3RyYXBUYWJsZVByb3BzO1xuICAvLyB9KSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsO1xuICBjaGlsZHJlbjogYW55O1xuICB0YWJsZUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBib290c3RyYXA0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgYm9vdHN0cmFwNT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHJlbW90ZUVtaXR0ZXI6IGFueTtcbiAgZGF0YTogYW55W107XG4gIGlzUmVtb3RlUGFnaW5hdGlvbjogRnVuY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbkRhdGFQcm92aWRlclByb3BzIHtcbiAgZGF0YTogYW55W107XG4gIHJlbW90ZUVtaXR0ZXI6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlzUmVtb3RlUGFnaW5hdGlvbjogKCkgPT4gYm9vbGVhbjtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgcGFnaW5hdGlvbjoge1xuICAgIG9wdGlvbnM6IHtcbiAgICAgIGN1c3RvbT86IGJvb2xlYW47XG4gICAgICBwYWdlU3RhcnRJbmRleD86IG51bWJlcjtcbiAgICAgIG9uUGFnZUNoYW5nZTogKG5ld1BhZ2U6IGFueSwgY3VyclNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gICAgfTtcbiAgfTtcbiAgb25EYXRhU2l6ZUNoYW5nZT86IChkYXRhU2l6ZTogeyBkYXRhU2l6ZTogbnVtYmVyIH0pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zID0ge30pID0+ICh7XG4gIGNyZWF0ZUNvbnRleHQ6IGNyZWF0ZURhdGFDb250ZXh0LFxuICBvcHRpb25zLFxufSk7XG5cbmNvbnN0IHsgUHJvdmlkZXIsIENvbnN1bWVyIH0gPSBjcmVhdGVCYXNlQ29udGV4dCgpO1xuXG5jb25zdCBDdXN0b21pemFibGVQcm92aWRlciA9IChwcm9wczogUGFnaW5hdGlvblByb3ZpZGVyUHJvcHMpID0+IChcbiAgPFByb3ZpZGVyIHsuLi5wcm9wc30+XG4gICAgPENvbnN1bWVyPlxuICAgICAgeyhwYWdpbmF0aW9uUHJvcHM6IGFueSkgPT4gcHJvcHMuY2hpbGRyZW4ocGFnaW5hdGlvblByb3BzKX1cbiAgICA8L0NvbnN1bWVyPlxuICA8L1Byb3ZpZGVyPlxuKTtcblxuXG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0aW9uUHJvdmlkZXIgPSBDdXN0b21pemFibGVQcm92aWRlcjtcbmV4cG9ydCB7XG4gIFBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSxcbiAgUGFnaW5hdGlvblRvdGFsU3RhbmRhbG9uZSxcbiAgU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBQQUdJTkFUSU9OX1NJWkU6IDUsXG4gIFBBR0VfU1RBUlRfSU5ERVg6IDEsXG4gIFdpdGhfRklSU1RfQU5EX0xBU1Q6IHRydWUsXG4gIFNIT1dfQUxMX1BBR0VfQlROUzogZmFsc2UsXG4gIFNIT1dfVE9UQUw6IGZhbHNlLFxuICBQQUdJTkFUSU9OX1RPVEFMOiBudWxsLFxuICBGSVJTVF9QQUdFX1RFWFQ6IFwiPDxcIixcbiAgUFJFX1BBR0VfVEVYVDogXCI8XCIsXG4gIE5FWFRfUEFHRV9URVhUOiBcIj5cIixcbiAgTEFTVF9QQUdFX1RFWFQ6IFwiPj5cIixcbiAgTkVYVF9QQUdFX1RJVExFOiBcIm5leHQgcGFnZVwiLFxuICBMQVNUX1BBR0VfVElUTEU6IFwibGFzdCBwYWdlXCIsXG4gIFBSRV9QQUdFX1RJVExFOiBcInByZXZpb3VzIHBhZ2VcIixcbiAgRklSU1RfUEFHRV9USVRMRTogXCJmaXJzdCBwYWdlXCIsXG4gIFNJWkVfUEVSX1BBR0VfTElTVDogWzEwLCAyNSwgMzAsIDUwXSxcbiAgSElERV9TSVpFX1BFUl9QQUdFOiBmYWxzZSxcbiAgSElERV9QQUdFX0xJU1RfT05MWV9PTkVfUEFHRTogZmFsc2UsXG59O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyUHJvcHMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHsgYWxpZ25QYWdlLCBnZXRCeUN1cnJQYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IFBhZ2luYXRpb24gZnJvbSBcIi4vcGFnaW5hdGlvblwiO1xuaW1wb3J0IGNyZWF0ZUJhc2VDb250ZXh0IGZyb20gXCIuL3N0YXRlLWNvbnRleHRcIjtcblxuY29uc3QgeyBQcm92aWRlciB9ID0gY3JlYXRlQmFzZUNvbnRleHQoKTtcblxuY29uc3QgUGFnaW5hdGlvbkRhdGFDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuXG5jbGFzcyBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXIge1xuXG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wczogUGFnaW5hdGlvbkRhdGFQcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wcyk7XG4gICAgY29uc3QgeyBjdXJyU2l6ZVBlclBhZ2UgfSA9IHRoaXM7XG4gICAgY29uc3QgeyBjdXN0b20sIG9uUGFnZUNoYW5nZSB9ID0gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucztcblxuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnBhZ2VTdGFydEluZGV4ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5wYWdlU3RhcnRJbmRleFxuICAgICAgICA6IENvbnN0LlBBR0VfU1RBUlRfSU5ERVg7XG5cbiAgICAvLyB1c2VyIHNob3VsZCBhbGlnbiB0aGUgcGFnZSB3aGVuIHRoZSBwYWdlIGlzIG5vdCBmaXQgdG8gdGhlIGRhdGEgc2l6ZSB3aGVuIHJlbW90ZSBlbmFibGVcbiAgICBpZiAoIXRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkgJiYgIWN1c3RvbSkge1xuICAgICAgY29uc3QgbmV3UGFnZSA9IGFsaWduUGFnZShcbiAgICAgICAgbmV4dFByb3BzLmRhdGEubGVuZ3RoLFxuICAgICAgICB0aGlzLnByb3BzLmRhdGEubGVuZ3RoLFxuICAgICAgICB0aGlzLmN1cnJQYWdlLFxuICAgICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgIHBhZ2VTdGFydEluZGV4XG4gICAgICApO1xuXG4gICAgICBpZiAodGhpcy5jdXJyUGFnZSAhPT0gbmV3UGFnZSkge1xuICAgICAgICBpZiAob25QYWdlQ2hhbmdlKSB7XG4gICAgICAgICAgb25QYWdlQ2hhbmdlKG5ld1BhZ2UsIGN1cnJTaXplUGVyUGFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyUGFnZSA9IG5ld1BhZ2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG5leHRQcm9wcy5vbkRhdGFTaXplQ2hhbmdlICYmXG4gICAgICBuZXh0UHJvcHMuZGF0YS5sZW5ndGggIT09IHRoaXMucHJvcHMuZGF0YS5sZW5ndGhcbiAgICApIHtcbiAgICAgIG5leHRQcm9wcy5vbkRhdGFTaXplQ2hhbmdlKHsgZGF0YVNpemU6IHRoaXMucHJvcHMuZGF0YS5sZW5ndGggfSk7XG4gICAgfVxuICB9XG5cbiAgaXNSZW1vdGVQYWdpbmF0aW9uID0gKCkgPT4gdGhpcy5wcm9wcy5pc1JlbW90ZVBhZ2luYXRpb24oKTtcblxuICByZW5kZXJEZWZhdWx0UGFnaW5hdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyEuY3VzdG9tKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhZ2U6IGN1cnJQYWdlLFxuICAgICAgICBzaXplUGVyUGFnZTogY3VyclNpemVQZXJQYWdlLFxuICAgICAgICBkYXRhU2l6ZSxcbiAgICAgICAgLi4ucmVzdFxuICAgICAgfSA9IHRoaXMuZ2V0UGFnaW5hdGlvblByb3BzKCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnaW5hdGlvblxuICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgIGtleT1cInBhZ2luYXRpb25cIlxuICAgICAgICAgIGRhdGFTaXplPXtkYXRhU2l6ZSB8fCB0aGlzLnByb3BzLmRhdGEubGVuZ3RofVxuICAgICAgICAgIGN1cnJQYWdlPXtjdXJyUGFnZX1cbiAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U9e2N1cnJTaXplUGVyUGFnZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgICBjb25zdCBjdXJyU2l6ZVBlclBhZ2UgPSBvcHRpb25zLnNpemVQZXJQYWdlID8/IHRoaXMuY3VyclNpemVQZXJQYWdlO1xuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWFxuICAgICAgICA6IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG5cbiAgICAvLyB3b3JrYXJvdW5kIGFuIGlzc3VlIHdpdGggY3VyclBhZ2UgaXMgbm90IDEsIGJ1dCBkYXRhIHNpemUgaXMgbGVzcyB0aGFuIGN1cnJTaXplUGVyUGFnZVxuICAgIC8vIHdoZW4gU2VhcmNoQmFyIGlucHV0IGNoYW5nZWQsIGNvbXBvbmVudERpZFVwZGF0ZSBpbiB0aGUgU0FNRSBUb29sa2l0IHVwZGF0ZWQgKHNlYXJjaGluZyB0aGUgZGF0YSlcbiAgICAvLyBzZWNvbmRseSBhZnRlciBjb21wb25lbnREaWRVcGRhdGUgKGNhbGN1bGF0aW5nIGN1cnJQYWdlKSBpbiB0aGlzIHBhY2thZ2UgdHJpZ2dlcmVkIGF0IGZpcnN0XG4gICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgY3VyclBhZ2UgPSBvcHRpb25zLnBhZ2UgPz8gdGhpcy5jdXJyUGFnZTtcblxuICAgIGlmICghdGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSAmJiBkYXRhLmxlbmd0aCA8PSAoY3VyclBhZ2UgLSAxKSAqIGN1cnJTaXplUGVyUGFnZSkge1xuICAgICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguZmxvb3IoZGF0YS5sZW5ndGggLyBjdXJyU2l6ZVBlclBhZ2UpICsgMTtcbiAgICAgIGN1cnJQYWdlID0gY3VyclBhZ2UgPiB0b3RhbFBhZ2VzID8gdG90YWxQYWdlcyA6IGN1cnJQYWdlO1xuICAgICAgdGhpcy5jdXJyUGFnZSA9IGN1cnJQYWdlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICB0aGlzLmN1cnJQYWdlID0gY3VyclBhZ2U7XG4gICAgfVxuXG4gICAgZGF0YSA9IHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKClcbiAgICAgID8gZGF0YVxuICAgICAgOiBnZXRCeUN1cnJQYWdlKGRhdGEsIGN1cnJQYWdlLCBjdXJyU2l6ZVBlclBhZ2UsIHBhZ2VTdGFydEluZGV4KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UGFnaW5hdGlvbkRhdGFDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgIHZhbHVlPXt7IGRhdGEsIHNldFJlbW90ZUVtaXR0ZXI6IHRoaXMuc2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIHt0aGlzLnJlbmRlckRlZmF1bHRQYWdpbmF0aW9uKCl9XG4gICAgICA8L1BhZ2luYXRpb25EYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+ICh7XG4gIFByb3ZpZGVyOiBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyLFxuICBDb25zdW1lcjogUGFnaW5hdGlvbkRhdGFDb250ZXh0LkNvbnN1bWVyLFxufSk7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIFBhZ2VCdXR0b25Qcm9wcyB7XG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IGFueSkgPT4gdm9pZDtcbiAgcGFnZTogUmVhY3QuUmVhY3ROb2RlIHwgbnVtYmVyIHwgc3RyaW5nO1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xufVxuXG5jbGFzcyBQYWdlQnV0dG9uIGV4dGVuZHMgQ29tcG9uZW50PFBhZ2VCdXR0b25Qcm9wcz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cblxuICBoYW5kbGVDbGljayhlOiBhbnkpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcm9wcy5vblBhZ2VDaGFuZ2UodGhpcy5wcm9wcy5wYWdlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHBhZ2UsIHRpdGxlLCBhY3RpdmUsIGRpc2FibGVkLCBjbGFzc05hbWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNzKFxuICAgICAge1xuICAgICAgICBhY3RpdmUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBcInBhZ2UtaXRlbVwiOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGxpIGNsYXNzTmFtZT17Y2xhc3Nlc30gdGl0bGU9e3RpdGxlfT5cbiAgICAgICAgPGEgaHJlZj1cIiNcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBjbGFzc05hbWU9XCJwYWdlLWxpbmtcIj5cbiAgICAgICAgICB7cGFnZX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICApO1xuICB9XG59XG5cblxuXG5leHBvcnQgZGVmYXVsdCBQYWdlQnV0dG9uO1xuIiwiLyogZXNsaW50IG5vLW1peGVkLW9wZXJhdG9yczogMCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IENvbnN0IGZyb20gXCIuL2NvbnN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IChFeHRlbmRCYXNlOiBhbnkpID0+XG4gIGNsYXNzIFBhZ2VSZXNvbHZlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx0eXBlb2YgRXh0ZW5kQmFzZT4ge1xuICAgIGJhY2tUb1ByZXZQYWdlKCkge1xuICAgICAgY29uc3QgeyBjdXJyUGFnZSwgcGFnZVN0YXJ0SW5kZXggfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gY3VyclBhZ2UgLSAxIDwgcGFnZVN0YXJ0SW5kZXggPyBwYWdlU3RhcnRJbmRleCA6IGN1cnJQYWdlIC0gMTtcbiAgICB9XG5cbiAgICBpbml0aWFsU3RhdGUoKSB7XG4gICAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2UoKTtcbiAgICAgIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5jYWxjdWxhdGVMYXN0UGFnZSh0b3RhbFBhZ2VzKTtcbiAgICAgIHJldHVybiB7IHRvdGFsUGFnZXMsIGxhc3RQYWdlIH07XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlVG90YWxQYWdlKFxuICAgICAgc2l6ZVBlclBhZ2UgPSB0aGlzLnByb3BzLmN1cnJTaXplUGVyUGFnZSxcbiAgICAgIGRhdGFTaXplID0gdGhpcy5wcm9wcy5kYXRhU2l6ZVxuICAgICkge1xuICAgICAgcmV0dXJuIE1hdGguY2VpbChkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVMYXN0UGFnZSh0b3RhbFBhZ2VzOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgcGFnZVN0YXJ0SW5kZXggfSA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gcGFnZVN0YXJ0SW5kZXggKyB0b3RhbFBhZ2VzIC0gMTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVGcm9tVG8oKSB7XG4gICAgICBjb25zdCB7IGRhdGFTaXplLCBjdXJyUGFnZSwgY3VyclNpemVQZXJQYWdlLCBwYWdlU3RhcnRJbmRleCB9ID1cbiAgICAgICAgdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKENvbnN0LlBBR0VfU1RBUlRfSU5ERVggLSBwYWdlU3RhcnRJbmRleCk7XG5cbiAgICAgIGxldCBmcm9tID0gKGN1cnJQYWdlIC0gcGFnZVN0YXJ0SW5kZXgpICogY3VyclNpemVQZXJQYWdlO1xuICAgICAgZnJvbSA9IGRhdGFTaXplID09PSAwID8gMCA6IGZyb20gKyAxO1xuICAgICAgbGV0IHRvID0gTWF0aC5taW4oY3VyclNpemVQZXJQYWdlICogKGN1cnJQYWdlICsgb2Zmc2V0KSwgZGF0YVNpemUpO1xuICAgICAgaWYgKHRvID4gZGF0YVNpemUpIHRvID0gZGF0YVNpemU7XG5cbiAgICAgIHJldHVybiBbZnJvbSwgdG9dO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVBhZ2VzKHRvdGFsUGFnZXM6IGFueSwgbGFzdFBhZ2U6IGFueSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyUGFnZSxcbiAgICAgICAgcGFnaW5hdGlvblNpemUsXG4gICAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgICB3aXRoRmlyc3RBbmRMYXN0LFxuICAgICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgICBwcmVQYWdlVGV4dCxcbiAgICAgICAgbmV4dFBhZ2VUZXh0LFxuICAgICAgICBsYXN0UGFnZVRleHQsXG4gICAgICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGxldCBwYWdlczogYW55ID0gW107XG4gICAgICBsZXQgZW5kUGFnZSA9IHRvdGFsUGFnZXM7XG4gICAgICBpZiAoZW5kUGFnZSA8PSAwKSByZXR1cm4gW107XG5cbiAgICAgIGxldCBzdGFydFBhZ2UgPSBNYXRoLm1heChcbiAgICAgICAgY3VyclBhZ2UgLSBNYXRoLmZsb29yKHBhZ2luYXRpb25TaXplIC8gMiksXG4gICAgICAgIHBhZ2VTdGFydEluZGV4XG4gICAgICApO1xuICAgICAgZW5kUGFnZSA9IHN0YXJ0UGFnZSArIHBhZ2luYXRpb25TaXplIC0gMTtcblxuICAgICAgaWYgKGVuZFBhZ2UgPiBsYXN0UGFnZSkge1xuICAgICAgICBlbmRQYWdlID0gbGFzdFBhZ2U7XG4gICAgICAgIHN0YXJ0UGFnZSA9IGVuZFBhZ2UgLSBwYWdpbmF0aW9uU2l6ZSArIDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbHdheXNTaG93QWxsQnRucykge1xuICAgICAgICBpZiAod2l0aEZpcnN0QW5kTGFzdCkge1xuICAgICAgICAgIHBhZ2VzID0gW2ZpcnN0UGFnZVRleHQsIHByZVBhZ2VUZXh0XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWdlcyA9IFtwcmVQYWdlVGV4dF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBzdGFydFBhZ2UgIT09IHBhZ2VTdGFydEluZGV4ICYmXG4gICAgICAgIHRvdGFsUGFnZXMgPiBwYWdpbmF0aW9uU2l6ZSAmJlxuICAgICAgICB3aXRoRmlyc3RBbmRMYXN0ICYmXG4gICAgICAgIHBhZ2VzLmxlbmd0aCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIHBhZ2VzID0gW2ZpcnN0UGFnZVRleHQsIHByZVBhZ2VUZXh0XTtcbiAgICAgIH0gZWxzZSBpZiAodG90YWxQYWdlcyA+IDEgJiYgcGFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHBhZ2VzID0gW3ByZVBhZ2VUZXh0XTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0UGFnZTsgaSA8PSBlbmRQYWdlOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGkgPj0gcGFnZVN0YXJ0SW5kZXgpIHBhZ2VzLnB1c2goaSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbHdheXNTaG93QWxsQnRucyB8fCAoZW5kUGFnZSA8PSBsYXN0UGFnZSAmJiBwYWdlcy5sZW5ndGggPiAxKSkge1xuICAgICAgICBwYWdlcy5wdXNoKG5leHRQYWdlVGV4dCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChlbmRQYWdlICE9PSBsYXN0UGFnZSAmJiB3aXRoRmlyc3RBbmRMYXN0KSB8fFxuICAgICAgICAod2l0aEZpcnN0QW5kTGFzdCAmJiBhbHdheXNTaG93QWxsQnRucylcbiAgICAgICkge1xuICAgICAgICBwYWdlcy5wdXNoKGxhc3RQYWdlVGV4dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmICgoZW5kUGFnZSA8PSBsYXN0UGFnZSAmJiBwYWdlcy5sZW5ndGggPiAxKSB8fCBhbHdheXNTaG93QWxsQnRucykge1xuICAgICAgLy8gICBwYWdlcy5wdXNoKG5leHRQYWdlVGV4dCk7XG4gICAgICAvLyB9XG4gICAgICAvLyBpZiAoZW5kUGFnZSAhPT0gbGFzdFBhZ2UgJiYgd2l0aEZpcnN0QW5kTGFzdCkge1xuICAgICAgLy8gICBwYWdlcy5wdXNoKGxhc3RQYWdlVGV4dCk7XG4gICAgICAvLyB9XG5cbiAgICAgIHJldHVybiBwYWdlcztcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVQYWdlU3RhdHVzKHBhZ2VzID0gW10sIGxhc3RQYWdlOiBhbnksIGRpc2FibGVQYWdlVGl0bGUgPSBmYWxzZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyUGFnZSxcbiAgICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICAgIGZpcnN0UGFnZVRleHQsXG4gICAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgICBuZXh0UGFnZVRleHQsXG4gICAgICAgIGxhc3RQYWdlVGV4dCxcbiAgICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGlzU3RhcnQgPSAocGFnZTogYW55KSA9PlxuICAgICAgICBjdXJyUGFnZSA9PT0gcGFnZVN0YXJ0SW5kZXggJiZcbiAgICAgICAgKHBhZ2UgPT09IGZpcnN0UGFnZVRleHQgfHwgcGFnZSA9PT0gcHJlUGFnZVRleHQpO1xuICAgICAgY29uc3QgaXNFbmQgPSAocGFnZTogYW55KSA9PlxuICAgICAgICBjdXJyUGFnZSA9PT0gbGFzdFBhZ2UgJiZcbiAgICAgICAgKHBhZ2UgPT09IG5leHRQYWdlVGV4dCB8fCBwYWdlID09PSBsYXN0UGFnZVRleHQpO1xuXG4gICAgICByZXR1cm4gcGFnZXNcbiAgICAgICAgLmZpbHRlcigocGFnZSkgPT4ge1xuICAgICAgICAgIGlmIChhbHdheXNTaG93QWxsQnRucykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhKGlzU3RhcnQocGFnZSkgfHwgaXNFbmQocGFnZSkpO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChwYWdlKSA9PiB7XG4gICAgICAgICAgbGV0IHRpdGxlOiBhbnk7XG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gcGFnZSA9PT0gY3VyclBhZ2U7XG4gICAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBpc1N0YXJ0KHBhZ2UpIHx8IGlzRW5kKHBhZ2UpO1xuXG4gICAgICAgICAgaWYgKHBhZ2UgPT09IG5leHRQYWdlVGV4dCkge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLnByb3BzLm5leHRQYWdlVGl0bGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYWdlID09PSBwcmVQYWdlVGV4dCkge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLnByb3BzLnByZVBhZ2VUaXRsZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhZ2UgPT09IGZpcnN0UGFnZVRleHQpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5wcm9wcy5maXJzdFBhZ2VUaXRsZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhZ2UgPT09IGxhc3RQYWdlVGV4dCkge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLnByb3BzLmxhc3RQYWdlVGl0bGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpdGxlID0gYCR7cGFnZX1gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHBhZ2VSZXN1bHQgPSB7IHBhZ2UsIGFjdGl2ZSwgZGlzYWJsZWQsIHRpdGxlIH07XG4gICAgICAgICAgaWYgKCFkaXNhYmxlUGFnZVRpdGxlKSB7XG4gICAgICAgICAgICBwYWdlUmVzdWx0LnRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwYWdlUmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVTaXplUGVyUGFnZVN0YXR1cygpIHtcbiAgICAgIGNvbnN0IHsgc2l6ZVBlclBhZ2VMaXN0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHNpemVQZXJQYWdlTGlzdC5tYXAoKF9zaXplUGVyUGFnZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2VUZXh0ID1cbiAgICAgICAgICB0eXBlb2YgX3NpemVQZXJQYWdlLnRleHQgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgID8gX3NpemVQZXJQYWdlLnRleHRcbiAgICAgICAgICAgIDogX3NpemVQZXJQYWdlO1xuICAgICAgICBjb25zdCBwYWdlTnVtYmVyID1cbiAgICAgICAgICB0eXBlb2YgX3NpemVQZXJQYWdlLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICA/IF9zaXplUGVyUGFnZS52YWx1ZVxuICAgICAgICAgICAgOiBfc2l6ZVBlclBhZ2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dDogYCR7cGFnZVRleHR9YCxcbiAgICAgICAgICBwYWdlOiBwYWdlTnVtYmVyLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuIiwiaW1wb3J0IENvbnN0IGZyb20gXCIuL2NvbnN0XCI7XG5cbmNvbnN0IGdldE5vcm1hbGl6ZWRQYWdlID0gKHBhZ2U6IGFueSwgcGFnZVN0YXJ0SW5kZXg6IGFueSkgPT4ge1xuICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicygxIC0gcGFnZVN0YXJ0SW5kZXgpO1xuICByZXR1cm4gcGFnZSArIG9mZnNldDtcbn07XG5cbmNvbnN0IGVuZEluZGV4ID0gKHBhZ2U6IGFueSwgc2l6ZVBlclBhZ2U6IGFueSwgcGFnZVN0YXJ0SW5kZXg6IGFueSkgPT5cbiAgZ2V0Tm9ybWFsaXplZFBhZ2UocGFnZSwgcGFnZVN0YXJ0SW5kZXgpICogc2l6ZVBlclBhZ2UgLSAxO1xuXG5jb25zdCBzdGFydEluZGV4ID0gKGVuZDogYW55LCBzaXplUGVyUGFnZTogYW55KSA9PiBlbmQgLSAoc2l6ZVBlclBhZ2UgLSAxKTtcblxuZXhwb3J0IGNvbnN0IGFsaWduUGFnZSA9IChcbiAgZGF0YVNpemU6IGFueSxcbiAgcHJldkRhdGFTaXplOiBhbnksXG4gIHBhZ2U6IGFueSxcbiAgc2l6ZVBlclBhZ2U6IGFueSxcbiAgcGFnZVN0YXJ0SW5kZXg6IGFueVxuKSA9PiB7XG4gIGlmIChwcmV2RGF0YVNpemUgPCBkYXRhU2l6ZSkgcmV0dXJuIHBhZ2U7XG4gIGlmIChwYWdlIDwgcGFnZVN0YXJ0SW5kZXgpIHJldHVybiBwYWdlU3RhcnRJbmRleDtcbiAgaWYgKGRhdGFTaXplIDw9IDApIHJldHVybiBwYWdlU3RhcnRJbmRleDtcbiAgaWYgKFxuICAgIHBhZ2UgPj0gTWF0aC5mbG9vcihkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKSArIHBhZ2VTdGFydEluZGV4ICYmXG4gICAgcGFnZVN0YXJ0SW5kZXggPT09IDFcbiAgKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbChkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKTtcbiAgfVxuICBpZiAocGFnZSA+PSBNYXRoLmZsb29yKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpICYmIHBhZ2VTdGFydEluZGV4ID09PSAwKSB7XG4gICAgY29uc3QgbmV3UGFnZSA9IE1hdGguY2VpbChkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKTtcbiAgICByZXR1cm4gbmV3UGFnZSAtIE1hdGguYWJzKENvbnN0LlBBR0VfU1RBUlRfSU5ERVggLSBwYWdlU3RhcnRJbmRleCk7XG4gIH1cbiAgcmV0dXJuIHBhZ2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QnlDdXJyUGFnZSA9IChcbiAgZGF0YTogYW55LFxuICBwYWdlOiBhbnksXG4gIHNpemVQZXJQYWdlOiBhbnksXG4gIHBhZ2VTdGFydEluZGV4OiBhbnlcbikgPT4ge1xuICBjb25zdCBkYXRhU2l6ZSA9IGRhdGEubGVuZ3RoO1xuICBpZiAoIWRhdGFTaXplKSByZXR1cm4gW107XG5cbiAgY29uc3QgZW5kID0gZW5kSW5kZXgocGFnZSwgc2l6ZVBlclBhZ2UsIHBhZ2VTdGFydEluZGV4KTtcbiAgY29uc3Qgc3RhcnQgPSBzdGFydEluZGV4KGVuZCwgc2l6ZVBlclBhZ2UpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpICs9IDEpIHtcbiAgICByZXN1bHQucHVzaChkYXRhW2ldKTtcbiAgICBpZiAoaSArIDEgPT09IGRhdGFTaXplKSBicmVhaztcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG4vKiBlc2xpbnQgY2FtZWxjYXNlOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBwYWdlUmVzb2x2ZXIgZnJvbSBcIi4vcGFnZS1yZXNvbHZlclwiO1xuXG5leHBvcnQgZGVmYXVsdCAoV3JhcHBlZENvbXBvbmVudDogYW55KSA9PlxuICBjbGFzcyBQYWdpbmF0aW9uSGFuZGxlciBleHRlbmRzIHBhZ2VSZXNvbHZlcihDb21wb25lbnQpIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnN0YXRlID0gdGhpcy5pbml0aWFsU3RhdGUoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoY3VyclByb3BzOiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgY3VyclNpemVQZXJQYWdlLCBkYXRhU2l6ZSwgdG90YWxTaXplIH0gPSBjdXJyUHJvcHM7XG4gICAgICBsZXQgdG90YWxQYWdlcyA9IDA7XG5cbiAgICAgIGlmIChcbiAgICAgICAgY3VyclNpemVQZXJQYWdlICE9PSB0aGlzLnByb3BzLmN1cnJTaXplUGVyUGFnZSB8fFxuICAgICAgICBkYXRhU2l6ZSAhPT0gdGhpcy5wcm9wcy5kYXRhU2l6ZSB8fFxuICAgICAgICB0b3RhbFNpemUgIT09IHRoaXMucHJvcHMudG90YWxTaXplXG4gICAgICApIHtcbiAgICAgICAgaWYgKGN1cnJTaXplUGVyUGFnZSAhPT0gdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UpIHtcbiAgICAgICAgICB0b3RhbFBhZ2VzID0gdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2UoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgICAgIHRoaXMucHJvcHMudG90YWxTaXplID8/IHRoaXMucHJvcHMuZGF0YVNpemVcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFTaXplICE9PSB0aGlzLnByb3BzLmRhdGFTaXplKSB7XG4gICAgICAgICAgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgICB0aGlzLnByb3BzLmRhdGFTaXplXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0b3RhbFNpemUgIT09IHRoaXMucHJvcHMudG90YWxTaXplKSB7XG4gICAgICAgICAgdG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRvdGFsU2l6ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvdGFsUGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZShcbiAgICAgICAgICB0aGlzLnByb3BzLmN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgICB0aGlzLnByb3BzLmRhdGFTaXplXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5jYWxjdWxhdGVMYXN0UGFnZSh0b3RhbFBhZ2VzKTtcblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKHRvdGFsUGFnZXMgIT09IHRoaXMuc3RhdGUudG90YWxQYWdlcyB8fCBsYXN0UGFnZSAhPT0gdGhpcy5zdGF0ZS5sYXN0UGFnZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdG90YWxQYWdlcywgbGFzdFBhZ2UgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2Uoc2l6ZVBlclBhZ2U6IGFueSkge1xuICAgICAgY29uc3QgeyBjdXJyU2l6ZVBlclBhZ2UsIG9uU2l6ZVBlclBhZ2VDaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBzZWxlY3RlZFNpemUgPVxuICAgICAgICB0eXBlb2Ygc2l6ZVBlclBhZ2UgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IHBhcnNlSW50KHNpemVQZXJQYWdlLCAxMClcbiAgICAgICAgICA6IHNpemVQZXJQYWdlO1xuICAgICAgbGV0IHsgY3VyclBhZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoc2VsZWN0ZWRTaXplICE9PSBjdXJyU2l6ZVBlclBhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3VG90YWxQYWdlcyA9IHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlKHNlbGVjdGVkU2l6ZSk7XG4gICAgICAgIGNvbnN0IG5ld0xhc3RQYWdlID0gdGhpcy5jYWxjdWxhdGVMYXN0UGFnZShuZXdUb3RhbFBhZ2VzKTtcbiAgICAgICAgaWYgKGN1cnJQYWdlID4gbmV3TGFzdFBhZ2UpIGN1cnJQYWdlID0gbmV3TGFzdFBhZ2U7XG4gICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2Uoc2VsZWN0ZWRTaXplLCBjdXJyUGFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlUGFnZShuZXdQYWdlOiBhbnkpIHtcbiAgICAgIGxldCBwYWdlOiBhbnk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJQYWdlLFxuICAgICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgICAgcHJlUGFnZVRleHQsXG4gICAgICAgIG5leHRQYWdlVGV4dCxcbiAgICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IHsgbGFzdFBhZ2UgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChuZXdQYWdlID09PSBwcmVQYWdlVGV4dCkge1xuICAgICAgICBwYWdlID0gdGhpcy5iYWNrVG9QcmV2UGFnZSgpO1xuICAgICAgfSBlbHNlIGlmIChuZXdQYWdlID09PSBuZXh0UGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IGN1cnJQYWdlICsgMSA+IGxhc3RQYWdlID8gbGFzdFBhZ2UgOiBjdXJyUGFnZSArIDE7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BhZ2UgPT09IGxhc3RQYWdlVGV4dCkge1xuICAgICAgICBwYWdlID0gbGFzdFBhZ2U7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BhZ2UgPT09IGZpcnN0UGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IHBhZ2VTdGFydEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFnZSA9IHBhcnNlSW50KG5ld1BhZ2UsIDEwKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlICE9PSBjdXJyUGFnZSkge1xuICAgICAgICBvblBhZ2VDaGFuZ2UocGFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgbGFzdFBhZ2U9e3RoaXMuc3RhdGUubGFzdFBhZ2V9XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHRvdGFsUGFnZXM9e3RoaXMuc3RhdGUudG90YWxQYWdlc31cbiAgICAgICAgICBvblBhZ2VDaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlUGFnZX1cbiAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gIH07XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgcGFnZVJlc29sdmVyIGZyb20gXCIuL3BhZ2UtcmVzb2x2ZXJcIjtcbmltcG9ydCBQYWdpbmF0aW9uTGlzdCBmcm9tIFwiLi9wYWdpbmF0aW9uLWxpc3RcIjtcblxuY29uc3QgcGFnaW5hdGlvbkxpc3RBZGFwdGVyID0gKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT5cbiAgY2xhc3MgUGFnaW5hdGlvbkxpc3RBZGFwdGVyIGV4dGVuZHMgcGFnZVJlc29sdmVyKENvbXBvbmVudCkge1xuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbGFzdFBhZ2UsXG4gICAgICAgIHRvdGFsUGFnZXMsXG4gICAgICAgIHBhZ2VCdXR0b25SZW5kZXJlcixcbiAgICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgICBkaXNhYmxlUGFnZVRpdGxlLFxuICAgICAgICBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgcGFnZXMgPSB0aGlzLmNhbGN1bGF0ZVBhZ2VTdGF0dXMoXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUGFnZXModG90YWxQYWdlcywgbGFzdFBhZ2UpLFxuICAgICAgICBsYXN0UGFnZSxcbiAgICAgICAgZGlzYWJsZVBhZ2VUaXRsZVxuICAgICAgKTtcbiAgICAgIGlmICh0b3RhbFBhZ2VzID09PSAxICYmIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFdyYXBwZWRDb21wb25lbnRcbiAgICAgICAgICBwYWdlQnV0dG9uUmVuZGVyZXI9e3BhZ2VCdXR0b25SZW5kZXJlcn1cbiAgICAgICAgICBvblBhZ2VDaGFuZ2U9e29uUGFnZUNoYW5nZX1cbiAgICAgICAgICBwYWdlcz17cGFnZXN9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRpb25MaXN0V2l0aEFkYXB0ZXIgPSBwYWdpbmF0aW9uTGlzdEFkYXB0ZXIoUGFnaW5hdGlvbkxpc3QpO1xuZXhwb3J0IGRlZmF1bHQgcGFnaW5hdGlvbkxpc3RBZGFwdGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFBhZ2luYXRpb25IYW5kbGVyIGZyb20gXCIuL3BhZ2luYXRpb24taGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRpb25MaXN0IGZyb20gXCIuL3BhZ2luYXRpb24tbGlzdFwiO1xuaW1wb3J0IHBhZ2luYXRpb25MaXN0QWRhcHRlciBmcm9tIFwiLi9wYWdpbmF0aW9uLWxpc3QtYWRhcHRlclwiO1xuaW1wb3J0IHN0YW5kYWxvbmVBZGFwdGVyIGZyb20gXCIuL3N0YW5kYWxvbmUtYWRhcHRlclwiO1xuXG5jb25zdCBQYWdpbmF0aW9uTGlzdFN0YW5kYWxvbmUgPSAocHJvcHM6IGFueSkgPT4gPFBhZ2luYXRpb25MaXN0IHsuLi5wcm9wc30gLz47XG5cbmV4cG9ydCBkZWZhdWx0IHN0YW5kYWxvbmVBZGFwdGVyKFxuICBQYWdpbmF0aW9uSGFuZGxlcihwYWdpbmF0aW9uTGlzdEFkYXB0ZXIoUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lKSlcbik7XG4iLCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IFBhZ2VCdXR0b24gZnJvbSBcIi4vcGFnZS1idXR0b25cIjtcblxuaW50ZXJmYWNlIFBhZ2luYXRpb25MaXN0UHJvcHMge1xuICBwYWdlczogQXJyYXk8e1xuICAgIHBhZ2U6IFJlYWN0LlJlYWN0Tm9kZSB8IG51bWJlciB8IHN0cmluZztcbiAgICBhY3RpdmU/OiBib29sZWFuO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgfT47XG4gIG9uUGFnZUNoYW5nZTogKHBhZ2U6IGFueSkgPT4gdm9pZDtcbiAgcGFnZUJ1dHRvblJlbmRlcmVyPzogKHByb3BzOiBhbnkpID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGw7XG59XG5cbmNvbnN0IFBhZ2luYXRvbkxpc3QgPSAocHJvcHM6IFBhZ2luYXRpb25MaXN0UHJvcHMpID0+IChcbiAgPHVsIGNsYXNzTmFtZT1cInBhZ2luYXRpb24gcmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2UtYnRucy11bFwiPlxuICAgIHtwcm9wcy5wYWdlcy5tYXAoKHBhZ2VQcm9wczogYW55KSA9PiB7XG4gICAgICBpZiAocHJvcHMucGFnZUJ1dHRvblJlbmRlcmVyKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwcm9wcy5wYWdlQnV0dG9uUmVuZGVyZXIoe1xuICAgICAgICAgIC4uLnBhZ2VQcm9wcyxcbiAgICAgICAgICBvblBhZ2VDaGFuZ2U6IHByb3BzLm9uUGFnZUNoYW5nZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50ID8gUmVhY3QuY2xvbmVFbGVtZW50KGVsZW1lbnQsIHsga2V5OiBwYWdlUHJvcHMucGFnZSB9KSA6IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnZUJ1dHRvblxuICAgICAgICAgIGtleT17cGFnZVByb3BzLnBhZ2V9XG4gICAgICAgICAgey4uLnBhZ2VQcm9wc31cbiAgICAgICAgICBvblBhZ2VDaGFuZ2U9e3Byb3BzLm9uUGFnZUNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSl9XG4gIDwvdWw+XG4pO1xuXG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRvbkxpc3Q7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgcGFnZVJlc29sdmVyIGZyb20gXCIuL3BhZ2UtcmVzb2x2ZXJcIjtcbmltcG9ydCBQYWdpbmF0aW9uVG90YWwgZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbFwiO1xuXG5jb25zdCBwYWdpbmF0aW9uVG90YWxBZGFwdGVyID0gKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT5cbiAgY2xhc3MgUGFnaW5hdGlvblRvdGFsQWRhcHRlciBleHRlbmRzIHBhZ2VSZXNvbHZlcihDb21wb25lbnQpIHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCBbZnJvbSwgdG9dID0gdGhpcy5jYWxjdWxhdGVGcm9tVG8oKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgICAgZnJvbT17ZnJvbX1cbiAgICAgICAgICB0bz17dG99XG4gICAgICAgICAgZGF0YVNpemU9e3RoaXMucHJvcHMuZGF0YVNpemV9XG4gICAgICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI9e3RoaXMucHJvcHMucGFnaW5hdGlvblRvdGFsUmVuZGVyZXJ9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuZXhwb3J0IGNvbnN0IFBhZ2luYXRpb25Ub3RhbFdpdGhBZGFwdGVyID1cbiAgcGFnaW5hdGlvblRvdGFsQWRhcHRlcihQYWdpbmF0aW9uVG90YWwpO1xuZXhwb3J0IGRlZmF1bHQgcGFnaW5hdGlvblRvdGFsQWRhcHRlcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQYWdpbmF0aW9uVG90YWwgZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbFwiO1xuaW1wb3J0IHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi10b3RhbC1hZGFwdGVyXCI7XG5pbXBvcnQgc3RhbmRhbG9uZUFkYXB0ZXIgZnJvbSBcIi4vc3RhbmRhbG9uZS1hZGFwdGVyXCI7XG5cbmNvbnN0IFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUgPSAocHJvcHM6IGFueSkgPT4gKFxuICA8UGFnaW5hdGlvblRvdGFsIHsuLi5wcm9wc30gLz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IHN0YW5kYWxvbmVBZGFwdGVyKFxuICBwYWdpbmF0aW9uVG90YWxBZGFwdGVyKFBhZ2luYXRpb25Ub3RhbFN0YW5kYWxvbmUpXG4pO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uVG90YWxQcm9wcyB7XG4gIGZyb206IG51bWJlcjtcbiAgdG86IG51bWJlcjtcbiAgZGF0YVNpemU6IG51bWJlcjtcbiAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI/OiAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCBkYXRhU2l6ZTogbnVtYmVyKSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsO1xufVxuXG5jb25zdCBQYWdpbmF0aW9uVG90YWwgPSAocHJvcHM6IFBhZ2luYXRpb25Ub3RhbFByb3BzKSA9PiB7XG4gIGlmIChwcm9wcy5wYWdpbmF0aW9uVG90YWxSZW5kZXJlcikge1xuICAgIHJldHVybiBwcm9wcy5wYWdpbmF0aW9uVG90YWxSZW5kZXJlcihwcm9wcy5mcm9tLCBwcm9wcy50bywgcHJvcHMuZGF0YVNpemUpO1xuICB9XG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPVwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb24tdG90YWxcIj5cbiAgICAgICZuYnNwO1Nob3dpbmcgcm93cyB7cHJvcHMuZnJvbX0gdG8mbmJzcDt7cHJvcHMudG99IG9mJm5ic3A7XG4gICAgICB7cHJvcHMuZGF0YVNpemV9XG4gICAgPC9zcGFuPlxuICApO1xufTtcblxuXG5leHBvcnQgZGVmYXVsdCBQYWdpbmF0aW9uVG90YWw7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzOiAwICovXG4vKiBlc2xpbnQgYXJyb3ctYm9keS1zdHlsZTogMCAqL1xuaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgQ29uc3QgZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCBwYWdlUmVzb2x2ZXIgZnJvbSBcIi4vcGFnZS1yZXNvbHZlclwiO1xuaW1wb3J0IHBhZ2luYXRpb25IYW5kbGVyIGZyb20gXCIuL3BhZ2luYXRpb24taGFuZGxlclwiO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlciB9IGZyb20gXCIuL3BhZ2luYXRpb24tbGlzdC1hZGFwdGVyXCI7XG5pbXBvcnQgeyBQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlciB9IGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWwtYWRhcHRlclwiO1xuaW1wb3J0IHsgU2l6ZVBlclBhZ2VEcm9wZG93bldpdGhBZGFwdGVyIH0gZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1hZGFwdGVyXCI7XG5cbmNsYXNzIFBhZ2luYXRpb24gZXh0ZW5kcyBwYWdlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICB0YWJsZUlkLFxuICAgICAgY3VyclBhZ2UsXG4gICAgICBwYWdlU3RhcnRJbmRleCA9IENvbnN0LlBBR0VfU1RBUlRfSU5ERVgsXG4gICAgICBzaG93VG90YWwgPSBDb25zdC5TSE9XX1RPVEFMLFxuICAgICAgZGF0YVNpemUsXG4gICAgICBwYWdlTGlzdFJlbmRlcmVyID0gbnVsbCxcbiAgICAgIHBhZ2VCdXR0b25SZW5kZXJlciA9IG51bGwsXG4gICAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlciA9IENvbnN0LlBBR0lOQVRJT05fVE9UQUwsXG4gICAgICBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSA9IENvbnN0LkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0UsXG4gICAgICB0b3RhbFBhZ2VzLFxuICAgICAgbGFzdFBhZ2UsXG4gICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICBzaXplUGVyUGFnZUxpc3QgPSBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1QsXG4gICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBoaWRlU2l6ZVBlclBhZ2UgPSBDb25zdC5ISURFX1NJWkVfUEVSX1BBR0UsXG4gICAgICBzaXplUGVyUGFnZVJlbmRlcmVyID0gbnVsbCxcbiAgICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXIgPSBudWxsLFxuICAgICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgICAgIGJvb3RzdHJhcDQgPSBmYWxzZSxcbiAgICAgIGJvb3RzdHJhcDUgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVQYWdlVGl0bGUgPSBmYWxzZSxcbiAgICAgIHBhZ2luYXRpb25TaXplID0gQ29uc3QuUEFHSU5BVElPTl9TSVpFLFxuICAgICAgd2l0aEZpcnN0QW5kTGFzdCA9IENvbnN0LldpdGhfRklSU1RfQU5EX0xBU1QsXG4gICAgICBhbHdheXNTaG93QWxsQnRucyA9IENvbnN0LlNIT1dfQUxMX1BBR0VfQlROUyxcbiAgICAgIGZpcnN0UGFnZVRleHQgPSBDb25zdC5GSVJTVF9QQUdFX1RFWFQsXG4gICAgICBwcmVQYWdlVGV4dCA9IENvbnN0LlBSRV9QQUdFX1RFWFQsXG4gICAgICBuZXh0UGFnZVRleHQgPSBDb25zdC5ORVhUX1BBR0VfVEVYVCxcbiAgICAgIGxhc3RQYWdlVGV4dCA9IENvbnN0LkxBU1RfUEFHRV9URVhULFxuICAgICAgbmV4dFBhZ2VUaXRsZSA9IENvbnN0Lk5FWFRfUEFHRV9USVRMRSxcbiAgICAgIHByZVBhZ2VUaXRsZSA9IENvbnN0LlBSRV9QQUdFX1RJVExFLFxuICAgICAgZmlyc3RQYWdlVGl0bGUgPSBDb25zdC5GSVJTVF9QQUdFX1RJVExFLFxuICAgICAgbGFzdFBhZ2VUaXRsZSA9IENvbnN0LkxBU1RfUEFHRV9USVRMRSxcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5jYWxjdWxhdGVQYWdlU3RhdHVzKFxuICAgICAgdGhpcy5jYWxjdWxhdGVQYWdlcyh0b3RhbFBhZ2VzLCBsYXN0UGFnZSksXG4gICAgICBsYXN0UGFnZVxuICAgICk7XG4gICAgY29uc3QgcGFnZUxpc3RDbGFzcyA9IGNzKFxuICAgICAgXCJyZWFjdC1ib290c3RyYXAtdGFibGUtcGFnaW5hdGlvbi1saXN0XCIsXG4gICAgICBcImNvbC1tZC02IGNvbC14cy02IGNvbC02IGNvbC1zbS02IGNvbC1sZy02XCIsXG4gICAgICB7XG4gICAgICAgIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb24tbGlzdC1oaWRkZW5cIjpcbiAgICAgICAgICBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSAmJiB0b3RhbFBhZ2VzID09PSAxLFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93IHJlYWN0LWJvb3RzdHJhcC10YWJsZS1wYWdpbmF0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTYgY29sLXhzLTYgY29sLTYgY29sLXNtLTYgY29sLWxnLTZcIj5cbiAgICAgICAgICA8U2l6ZVBlclBhZ2VEcm9wZG93bldpdGhBZGFwdGVyXG4gICAgICAgICAgICBib290c3RyYXA0PXtib290c3RyYXA0fVxuICAgICAgICAgICAgYm9vdHN0cmFwNT17Ym9vdHN0cmFwNX1cbiAgICAgICAgICAgIHRhYmxlSWQ9e3RhYmxlSWR9XG4gICAgICAgICAgICBzaXplUGVyUGFnZUxpc3Q9e3NpemVQZXJQYWdlTGlzdH1cbiAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17Y3VyclNpemVQZXJQYWdlfVxuICAgICAgICAgICAgaGlkZVNpemVQZXJQYWdlPXtoaWRlU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICBzaXplUGVyUGFnZVJlbmRlcmVyPXtzaXplUGVyUGFnZVJlbmRlcmVyfVxuICAgICAgICAgICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcj17c2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcn1cbiAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U9e29uU2l6ZVBlclBhZ2VDaGFuZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c2hvd1RvdGFsID8gKFxuICAgICAgICAgICAgPFBhZ2luYXRpb25Ub3RhbFdpdGhBZGFwdGVyXG4gICAgICAgICAgICAgIGN1cnJQYWdlPXtjdXJyUGFnZX1cbiAgICAgICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtjdXJyU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICAgIHBhZ2VTdGFydEluZGV4PXtwYWdlU3RhcnRJbmRleH1cbiAgICAgICAgICAgICAgZGF0YVNpemU9e2RhdGFTaXplfVxuICAgICAgICAgICAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcj17cGFnaW5hdGlvblRvdGFsUmVuZGVyZXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3BhZ2VMaXN0UmVuZGVyZXIgPyAoXG4gICAgICAgICAgcGFnZUxpc3RSZW5kZXJlcih7XG4gICAgICAgICAgICBwYWdlcyxcbiAgICAgICAgICAgIG9uUGFnZUNoYW5nZSxcbiAgICAgICAgICB9KVxuICAgICAgICApIDogKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtwYWdlTGlzdENsYXNzfT5cbiAgICAgICAgICAgIDxQYWdpbmF0aW9uTGlzdFdpdGhBZGFwdGVyXG4gICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICBjdXJyUGFnZT17Y3VyclBhZ2V9XG4gICAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17Y3VyclNpemVQZXJQYWdlfVxuICAgICAgICAgICAgICBwYWdlU3RhcnRJbmRleD17cGFnZVN0YXJ0SW5kZXh9XG4gICAgICAgICAgICAgIGxhc3RQYWdlPXtsYXN0UGFnZX1cbiAgICAgICAgICAgICAgdG90YWxQYWdlcz17dG90YWxQYWdlc31cbiAgICAgICAgICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyPXtwYWdlQnV0dG9uUmVuZGVyZXJ9XG4gICAgICAgICAgICAgIG9uUGFnZUNoYW5nZT17b25QYWdlQ2hhbmdlfVxuICAgICAgICAgICAgICBwYWdpbmF0aW9uU2l6ZT17cGFnaW5hdGlvblNpemV9XG4gICAgICAgICAgICAgIHdpdGhGaXJzdEFuZExhc3Q9e3dpdGhGaXJzdEFuZExhc3R9XG4gICAgICAgICAgICAgIGZpcnN0UGFnZVRleHQ9e2ZpcnN0UGFnZVRleHR9XG4gICAgICAgICAgICAgIHByZVBhZ2VUZXh0PXtwcmVQYWdlVGV4dH1cbiAgICAgICAgICAgICAgbmV4dFBhZ2VUZXh0PXtuZXh0UGFnZVRleHR9XG4gICAgICAgICAgICAgIGxhc3RQYWdlVGV4dD17bGFzdFBhZ2VUZXh0fVxuICAgICAgICAgICAgICBhbHdheXNTaG93QWxsQnRucz17YWx3YXlzU2hvd0FsbEJ0bnN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlzYWJsZVBhZ2VUaXRsZTogZmFsc2UsXG4gICAgYm9vdHN0cmFwNDogZmFsc2UsXG4gICAgYm9vdHN0cmFwNTogZmFsc2UsXG4gICAgcGFnZVN0YXJ0SW5kZXg6IENvbnN0LlBBR0VfU1RBUlRfSU5ERVgsXG4gICAgcGFnaW5hdGlvblNpemU6IENvbnN0LlBBR0lOQVRJT05fU0laRSxcbiAgICB3aXRoRmlyc3RBbmRMYXN0OiBDb25zdC5XaXRoX0ZJUlNUX0FORF9MQVNULFxuICAgIGFsd2F5c1Nob3dBbGxCdG5zOiBDb25zdC5TSE9XX0FMTF9QQUdFX0JUTlMsXG4gICAgc2hvd1RvdGFsOiBDb25zdC5TSE9XX1RPVEFMLFxuICAgIHBhZ2VMaXN0UmVuZGVyZXI6IG51bGwsXG4gICAgcGFnZUJ1dHRvblJlbmRlcmVyOiBudWxsLFxuICAgIHNpemVQZXJQYWdlUmVuZGVyZXI6IG51bGwsXG4gICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI6IENvbnN0LlBBR0lOQVRJT05fVE9UQUwsXG4gICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcjogbnVsbCxcbiAgICBmaXJzdFBhZ2VUZXh0OiBDb25zdC5GSVJTVF9QQUdFX1RFWFQsXG4gICAgcHJlUGFnZVRleHQ6IENvbnN0LlBSRV9QQUdFX1RFWFQsXG4gICAgbmV4dFBhZ2VUZXh0OiBDb25zdC5ORVhUX1BBR0VfVEVYVCxcbiAgICBsYXN0UGFnZVRleHQ6IENvbnN0LkxBU1RfUEFHRV9URVhULFxuICAgIHNpemVQZXJQYWdlTGlzdDogQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNULFxuICAgIG5leHRQYWdlVGl0bGU6IENvbnN0Lk5FWFRfUEFHRV9USVRMRSxcbiAgICBwcmVQYWdlVGl0bGU6IENvbnN0LlBSRV9QQUdFX1RJVExFLFxuICAgIGZpcnN0UGFnZVRpdGxlOiBDb25zdC5GSVJTVF9QQUdFX1RJVExFLFxuICAgIGxhc3RQYWdlVGl0bGU6IENvbnN0LkxBU1RfUEFHRV9USVRMRSxcbiAgICBoaWRlU2l6ZVBlclBhZ2U6IENvbnN0LkhJREVfU0laRV9QRVJfUEFHRSxcbiAgICBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZTogQ29uc3QuSElERV9QQUdFX0xJU1RfT05MWV9PTkVfUEFHRSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGFnaW5hdGlvbkhhbmRsZXIoUGFnaW5hdGlvbik7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uQ2hpbGRQcm9wcyB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHBhZ2VSZXNvbHZlciBmcm9tIFwiLi9wYWdlLXJlc29sdmVyXCI7XG5pbXBvcnQgU2l6ZVBlclBhZ2VEcm9wRG93biBmcm9tIFwiLi9zaXplLXBlci1wYWdlLWRyb3Bkb3duXCI7XG5cbmNvbnN0IHNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyID0gKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT5cbiAgY2xhc3MgU2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIgZXh0ZW5kcyBwYWdlUmVzb2x2ZXIoQ29tcG9uZW50KSB7XG4gICAgc3RhdGUgPSB7IGRyb3Bkb3duT3BlbjogZmFsc2UgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQYWdpbmF0aW9uQ2hpbGRQcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5jbG9zZURyb3BEb3duID0gdGhpcy5jbG9zZURyb3BEb3duLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnRvZ2dsZURyb3BEb3duID0gdGhpcy50b2dnbGVEcm9wRG93bi5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSA9IHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuc3RhdGUgPSB7IGRyb3Bkb3duT3BlbjogZmFsc2UgfTtcbiAgICB9XG5cbiAgICB0b2dnbGVEcm9wRG93bigpIHtcbiAgICAgIGNvbnN0IGRyb3Bkb3duT3BlbiA9ICF0aGlzLnN0YXRlLmRyb3Bkb3duT3BlbjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHsgZHJvcGRvd25PcGVuIH0pKTtcbiAgICB9XG5cbiAgICBjbG9zZURyb3BEb3duKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyBkcm9wZG93bk9wZW46IGZhbHNlIH0pKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZShzaXplUGVyUGFnZTogYW55KSB7XG4gICAgICB0aGlzLnByb3BzLm9uU2l6ZVBlclBhZ2VDaGFuZ2Uoc2l6ZVBlclBhZ2UpO1xuICAgICAgdGhpcy5jbG9zZURyb3BEb3duKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB0YWJsZUlkLFxuICAgICAgICBib290c3RyYXA0LFxuICAgICAgICBib290c3RyYXA1LFxuICAgICAgICBzaXplUGVyUGFnZUxpc3QsXG4gICAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgaGlkZVNpemVQZXJQYWdlLFxuICAgICAgICBzaXplUGVyUGFnZVJlbmRlcmVyLFxuICAgICAgICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGRyb3Bkb3duT3Blbjogb3BlbiB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKHNpemVQZXJQYWdlTGlzdC5sZW5ndGggPiAxICYmICFoaWRlU2l6ZVBlclBhZ2UpIHtcbiAgICAgICAgaWYgKHNpemVQZXJQYWdlUmVuZGVyZXIpIHtcbiAgICAgICAgICByZXR1cm4gc2l6ZVBlclBhZ2VSZW5kZXJlcih7XG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNhbGN1bGF0ZVNpemVQZXJQYWdlU3RhdHVzKCksXG4gICAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U6IGAke2N1cnJTaXplUGVyUGFnZX1gLFxuICAgICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17YCR7Y3VyclNpemVQZXJQYWdlfWB9XG4gICAgICAgICAgICBvcHRpb25zPXt0aGlzLmNhbGN1bGF0ZVNpemVQZXJQYWdlU3RhdHVzKCl9XG4gICAgICAgICAgICBvcHRpb25SZW5kZXJlcj17c2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcn1cbiAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnRvZ2dsZURyb3BEb3dufVxuICAgICAgICAgICAgb25CbHVyPXt0aGlzLmNsb3NlRHJvcERvd259XG4gICAgICAgICAgICBvcGVuPXtvcGVufVxuICAgICAgICAgICAgdGFibGVJZD17dGFibGVJZH1cbiAgICAgICAgICAgIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9XG4gICAgICAgICAgICBib290c3RyYXA1PXtib290c3RyYXA1fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBjb25zdCBTaXplUGVyUGFnZURyb3Bkb3duV2l0aEFkYXB0ZXIgPVxuICBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlcihTaXplUGVyUGFnZURyb3BEb3duKTtcbmV4cG9ydCBkZWZhdWx0IHNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHBhZ2luYXRpb25IYW5kbGVyIGZyb20gXCIuL3BhZ2luYXRpb24taGFuZGxlclwiO1xuaW1wb3J0IFNpemVQZXJQYWdlRHJvcGRvd24gZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1kcm9wZG93blwiO1xuaW1wb3J0IHNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyIGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tYWRhcHRlclwiO1xuaW1wb3J0IHN0YW5kYWxvbmVBZGFwdGVyIGZyb20gXCIuL3N0YW5kYWxvbmUtYWRhcHRlclwiO1xuXG5jb25zdCBTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSA9IChwcm9wczogYW55KSA9PiAoXG4gIDxTaXplUGVyUGFnZURyb3Bkb3duIHsuLi5wcm9wc30gLz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IHN0YW5kYWxvbmVBZGFwdGVyKFxuICBwYWdpbmF0aW9uSGFuZGxlcihzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlcihTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSkpXG4pO1xuIiwiaW1wb3J0IGNzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBTaXplUGVyUGFnZU9wdGlvbiBmcm9tIFwiLi9zaXplLXBlci1wYWdlLW9wdGlvblwiO1xuXG5jb25zdCBzaXplUGVyUGFnZURlZmF1bHRDbGFzcyA9IFwicmVhY3QtYnMtdGFibGUtc2l6ZVBlclBhZ2UtZHJvcGRvd25cIjtcblxuY29uc3Qgc2l6ZVBlclBhZ2VEcm9wRG93bkRlZmF1bHRQcm9wcyA9IHtcbiAgb3BlbjogZmFsc2UsXG4gIGhpZGRlbjogZmFsc2UsXG4gIGJ0bkNvbnRleHR1YWw6IFwiYnRuLWRlZmF1bHQgYnRuLXNlY29uZGFyeVwiLFxuICB2YXJpYXRpb246IFwiZHJvcGRvd25cIixcbiAgY2xhc3NOYW1lOiBcIlwiLFxuICBvcHRpb25SZW5kZXJlcjogbnVsbCxcbiAgYm9vdHN0cmFwNDogZmFsc2UsXG4gIGJvb3RzdHJhcDU6IGZhbHNlLFxuICB0YWJsZUlkOiBudWxsLFxufTtcblxuaW50ZXJmYWNlIFNpemVQZXJQYWdlRHJvcERvd25Qcm9wcyB7XG4gIGN1cnJTaXplUGVyUGFnZTogc3RyaW5nIHwgbnVtYmVyO1xuICBvcHRpb25zOiBBcnJheTx7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgfT47XG4gIG9uQ2xpY2s6IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBvbkJsdXI6IChlOiBSZWFjdC5Gb2N1c0V2ZW50KSA9PiB2b2lkO1xuICBvblNpemVQZXJQYWdlQ2hhbmdlOiAoc2l6ZVBlclBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW47XG4gIGJvb3RzdHJhcDU/OiBib29sZWFuO1xuICB0YWJsZUlkPzogc3RyaW5nO1xuICBvcGVuPzogYm9vbGVhbjtcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgYnRuQ29udGV4dHVhbD86IHN0cmluZztcbiAgdmFyaWF0aW9uPzogXCJkcm9wZG93blwiIHwgXCJkcm9wdXBcIjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBvcHRpb25SZW5kZXJlcj86IChwcm9wczogYW55KSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsO1xufVxuXG5jb25zdCBTaXplUGVyUGFnZURyb3BEb3duID0gKHByb3BzOiBTaXplUGVyUGFnZURyb3BEb3duUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIG9wZW4sXG4gICAgdGFibGVJZCxcbiAgICBoaWRkZW4sXG4gICAgb25DbGljayxcbiAgICBvbkJsdXIsXG4gICAgb3B0aW9ucyxcbiAgICBjbGFzc05hbWUsXG4gICAgdmFyaWF0aW9uLFxuICAgIGJvb3RzdHJhcDQsXG4gICAgYm9vdHN0cmFwNSxcbiAgICBidG5Db250ZXh0dWFsLFxuICAgIG9wdGlvblJlbmRlcmVyLFxuICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICB9ID0geyAuLi5zaXplUGVyUGFnZURyb3BEb3duRGVmYXVsdFByb3BzLCAuLi5wcm9wcyB9O1xuXG4gIGNvbnN0IG9wZW5DbGFzcyA9IG9wZW4gPyBcIm9wZW4gc2hvd1wiIDogXCJcIjtcbiAgY29uc3QgZHJvcGRvd25DbGFzc2VzID0gY3MoXG4gICAgb3BlbkNsYXNzLFxuICAgIHNpemVQZXJQYWdlRGVmYXVsdENsYXNzLFxuICAgIHZhcmlhdGlvbixcbiAgICBjbGFzc05hbWVcbiAgKTtcblxuICBjb25zdCBpZCA9IHRhYmxlSWQgPyBgJHt0YWJsZUlkfS1wYWdlRHJvcERvd25gIDogXCJwYWdlRHJvcERvd25cIjtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBzdHlsZT17eyB2aXNpYmlsaXR5OiBoaWRkZW4gPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCIgfX1cbiAgICAgIGNsYXNzTmFtZT17ZHJvcGRvd25DbGFzc2VzfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJzaXplLXBlci1wYWdlLWRyb3Bkb3duXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17YGJ0biAke2J0bkNvbnRleHR1YWx9IGRyb3Bkb3duLXRvZ2dsZWB9XG4gICAgICAgIGRhdGEtdG9nZ2xlPXtib290c3RyYXA1ID8gdW5kZWZpbmVkIDogXCJkcm9wZG93blwifVxuICAgICAgICBkYXRhLWJzLXRvZ2dsZT17Ym9vdHN0cmFwNSA/IFwiZHJvcGRvd25cIiA6IHVuZGVmaW5lZH1cbiAgICAgICAgYXJpYS1leHBhbmRlZD17b3Blbn1cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICA+XG4gICAgICAgIHtjdXJyU2l6ZVBlclBhZ2V9e1wiIFwifVxuICAgICAgICB7Ym9vdHN0cmFwNCB8fCBib290c3RyYXA1ID8gbnVsbCA6IChcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNhcmV0XCIgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDx1bFxuICAgICAgICBjbGFzc05hbWU9e2Bkcm9wZG93bi1tZW51ICR7b3BlbkNsYXNzfWB9XG4gICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtpZH1cbiAgICAgID5cbiAgICAgICAge29wdGlvbnMubWFwKChvcHRpb246IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25SZW5kZXJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U2l6ZVBlclBhZ2VPcHRpb25cbiAgICAgICAgICAgICAgey4uLm9wdGlvbn1cbiAgICAgICAgICAgICAga2V5PXtvcHRpb24udGV4dH1cbiAgICAgICAgICAgICAgYm9vdHN0cmFwND17Ym9vdHN0cmFwNH1cbiAgICAgICAgICAgICAgYm9vdHN0cmFwNT17Ym9vdHN0cmFwNX1cbiAgICAgICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZT17b25TaXplUGVyUGFnZUNoYW5nZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L3VsPlxuICAgIDwvc3Bhbj5cbiAgKTtcbn07XG5cblxuXG5leHBvcnQgZGVmYXVsdCBTaXplUGVyUGFnZURyb3BEb3duO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBTaXplUGVyUGFnZU9wdGlvblByb3BzIHtcbiAgdGV4dDogc3RyaW5nO1xuICBwYWdlOiBudW1iZXI7XG4gIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuO1xuICBib290c3RyYXA1PzogYm9vbGVhbjtcbn1cblxuY29uc3QgU2l6ZVBlclBhZ2VPcHRpb24gPSAoe1xuICB0ZXh0LFxuICBwYWdlLFxuICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICBib290c3RyYXA0ID0gZmFsc2UsXG4gIGJvb3RzdHJhcDUgPSBmYWxzZSxcbn06IFNpemVQZXJQYWdlT3B0aW9uUHJvcHMpID0+XG4gIGJvb3RzdHJhcDQgfHwgYm9vdHN0cmFwNSA/IChcbiAgICA8YVxuICAgICAgaHJlZj1cIiNcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgIGNsYXNzTmFtZT1cImRyb3Bkb3duLWl0ZW1cIlxuICAgICAgZGF0YS1wYWdlPXtwYWdlfVxuICAgICAgb25Nb3VzZURvd249eyhlKSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZShwYWdlKTtcbiAgICAgIH19XG4gICAgPlxuICAgICAge3RleHR9XG4gICAgPC9hPlxuICApIDogKFxuICAgIDxsaSBrZXk9e3RleHR9IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9XCJkcm9wZG93bi1pdGVtXCI+XG4gICAgICA8YVxuICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgZGF0YS1wYWdlPXtwYWdlfVxuICAgICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZShwYWdlKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RleHR9XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgKTtcblxuXG5leHBvcnQgZGVmYXVsdCBTaXplUGVyUGFnZU9wdGlvbjtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+XG4gICh7IHBhZ2UsIHNpemVQZXJQYWdlLCAuLi5yZXN0IH06IGFueSkgPT5cbiAgICAoXG4gICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgY3VyclBhZ2U9e3BhZ2V9XG4gICAgICAgIGN1cnJTaXplUGVyUGFnZT17c2l6ZVBlclBhZ2V9XG4gICAgICAvPlxuICAgICk7XG4iLCIvKiBlc2xpbnQgcmVhY3QvcHJvcC10eXBlczogMCAqL1xuLyogZXNsaW50IHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wczogMCAqL1xuLyogZXNsaW50IG5vLWxvbmVseS1pZjogMCAqL1xuLyogZXNsaW50IGNhbWVsY2FzZTogMCAqL1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgQ29uc3QgZnJvbSBcIi4vY29uc3RcIjtcblxuaW1wb3J0IHsgUGFnaW5hdGlvblByb3ZpZGVyUHJvcHMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IGFsaWduUGFnZSB9IGZyb20gXCIuL3BhZ2VcIjtcblxuY29uc3QgU3RhdGVDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxhbnk+KG51bGwpO1xuXG5jbGFzcyBTdGF0ZVByb3ZpZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFBhZ2luYXRpb25Qcm92aWRlclByb3BzPiB7XG4gIGN1cnJQYWdlOiBudW1iZXI7XG4gIGN1cnJTaXplUGVyUGFnZTogbnVtYmVyO1xuICBkYXRhQ2hhbmdlTGlzdGVuZXI6IGFueTtcbiAgZGF0YVNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgcmVtb3RlRW1pdHRlcjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQYWdpbmF0aW9uUHJvdmlkZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVBhZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZURhdGFTaXplQ2hhbmdlID0gdGhpcy5oYW5kbGVEYXRhU2l6ZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLmJpbmQodGhpcyk7XG5cbiAgICBsZXQgY3VyclBhZ2U6IGFueTtcbiAgICBsZXQgY3VyclNpemVQZXJQYWdlOiBhbnk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHByb3BzLnBhZ2luYXRpb24hLm9wdGlvbnMhO1xuICAgIGNvbnN0IHNpemVQZXJQYWdlTGlzdCA9IG9wdGlvbnMuc2l6ZVBlclBhZ2VMaXN0IHx8IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVDtcblxuICAgIC8vIGluaXRpYWxpemUgY3VycmVudCBwYWdlXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnBhZ2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGN1cnJQYWdlID0gb3B0aW9ucy5wYWdlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMucGFnZVN0YXJ0SW5kZXggIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGN1cnJQYWdlID0gb3B0aW9ucy5wYWdlU3RhcnRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VyclBhZ2UgPSBDb25zdC5QQUdFX1NUQVJUX0lOREVYO1xuICAgIH1cblxuICAgIC8vIGluaXRpYWxpemUgY3VycmVudCBzaXplUGVyUGFnZVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaXplUGVyUGFnZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY3VyclNpemVQZXJQYWdlID0gb3B0aW9ucy5zaXplUGVyUGFnZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzaXplUGVyUGFnZUxpc3RbMF0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGN1cnJTaXplUGVyUGFnZSA9IHNpemVQZXJQYWdlTGlzdFswXS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VyclNpemVQZXJQYWdlID0gc2l6ZVBlclBhZ2VMaXN0WzBdO1xuICAgIH1cblxuICAgIHRoaXMuY3VyclBhZ2UgPSBjdXJyUGFnZTtcbiAgICB0aGlzLmRhdGFTaXplID0gb3B0aW9ucy50b3RhbFNpemU7XG4gICAgdGhpcy5jdXJyU2l6ZVBlclBhZ2UgPSBjdXJyU2l6ZVBlclBhZ2U7XG4gICAgdGhpcy5kYXRhQ2hhbmdlTGlzdGVuZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5kYXRhQ2hhbmdlTGlzdGVuZXIub24oXCJmaWx0ZXJDaGFuZ2VkXCIsIHRoaXMuaGFuZGxlRGF0YVNpemVDaGFuZ2UpO1xuICB9XG5cbiAgZ2V0UGFnaW5hdGlvblByb3BzID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgYm9vdHN0cmFwNCwgdGFibGVJZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgICBjb25zdCB7IGN1cnJQYWdlLCBjdXJyU2l6ZVBlclBhZ2UgfSA9IHRoaXM7XG4gICAgbGV0IGRhdGFTaXplOiBudW1iZXI7XG4gICAgaWYgKHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkpIHtcbiAgICAgIGRhdGFTaXplID0gb3B0aW9ucy50b3RhbFNpemUhO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhU2l6ZSA9IHRoaXMuZGF0YVNpemUhO1xuICAgIH1cbiAgICBjb25zdCB3aXRoRmlyc3RBbmRMYXN0ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLndpdGhGaXJzdEFuZExhc3QgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5XaXRoX0ZJUlNUX0FORF9MQVNUXG4gICAgICAgIDogb3B0aW9ucy53aXRoRmlyc3RBbmRMYXN0O1xuICAgIGNvbnN0IGFsd2F5c1Nob3dBbGxCdG5zID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmFsd2F5c1Nob3dBbGxCdG5zID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuU0hPV19BTExfUEFHRV9CVE5TXG4gICAgICAgIDogb3B0aW9ucy5hbHdheXNTaG93QWxsQnRucztcbiAgICBjb25zdCBoaWRlU2l6ZVBlclBhZ2UgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuaGlkZVNpemVQZXJQYWdlID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuSElERV9TSVpFX1BFUl9QQUdFXG4gICAgICAgIDogb3B0aW9ucy5oaWRlU2l6ZVBlclBhZ2U7XG4gICAgY29uc3QgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5ISURFX1BBR0VfTElTVF9PTkxZX09ORV9QQUdFXG4gICAgICAgIDogb3B0aW9ucy5oaWRlUGFnZUxpc3RPbmx5T25lUGFnZTtcbiAgICBjb25zdCBwYWdlU3RhcnRJbmRleCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LlBBR0VfU1RBUlRfSU5ERVhcbiAgICAgICAgOiBvcHRpb25zLnBhZ2VTdGFydEluZGV4O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgYm9vdHN0cmFwNCxcbiAgICAgIHRhYmxlSWQsXG4gICAgICBwYWdlOiBjdXJyUGFnZSxcbiAgICAgIHNpemVQZXJQYWdlOiBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlLFxuICAgICAgaGlkZVNpemVQZXJQYWdlLFxuICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgICB3aXRoRmlyc3RBbmRMYXN0LFxuICAgICAgZGF0YVNpemUsXG4gICAgICBzaXplUGVyUGFnZUxpc3Q6IG9wdGlvbnMuc2l6ZVBlclBhZ2VMaXN0IHx8IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVCxcbiAgICAgIHBhZ2luYXRpb25TaXplOiBvcHRpb25zLnBhZ2luYXRpb25TaXplIHx8IENvbnN0LlBBR0lOQVRJT05fU0laRSxcbiAgICAgIHNob3dUb3RhbDogb3B0aW9ucy5zaG93VG90YWwsXG4gICAgICBwYWdlTGlzdFJlbmRlcmVyOiBvcHRpb25zLnBhZ2VMaXN0UmVuZGVyZXIsXG4gICAgICBwYWdlQnV0dG9uUmVuZGVyZXI6IG9wdGlvbnMucGFnZUJ1dHRvblJlbmRlcmVyLFxuICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlcjogb3B0aW9ucy5zaXplUGVyUGFnZVJlbmRlcmVyLFxuICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXI6IG9wdGlvbnMucGFnaW5hdGlvblRvdGFsUmVuZGVyZXIsXG4gICAgICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyOiBvcHRpb25zLnNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXIsXG4gICAgICBmaXJzdFBhZ2VUZXh0OiBvcHRpb25zLmZpcnN0UGFnZVRleHQgfHwgQ29uc3QuRklSU1RfUEFHRV9URVhULFxuICAgICAgcHJlUGFnZVRleHQ6IG9wdGlvbnMucHJlUGFnZVRleHQgfHwgQ29uc3QuUFJFX1BBR0VfVEVYVCxcbiAgICAgIG5leHRQYWdlVGV4dDogb3B0aW9ucy5uZXh0UGFnZVRleHQgfHwgQ29uc3QuTkVYVF9QQUdFX1RFWFQsXG4gICAgICBsYXN0UGFnZVRleHQ6IG9wdGlvbnMubGFzdFBhZ2VUZXh0IHx8IENvbnN0LkxBU1RfUEFHRV9URVhULFxuICAgICAgcHJlUGFnZVRpdGxlOiBvcHRpb25zLnByZVBhZ2VUaXRsZSB8fCBDb25zdC5QUkVfUEFHRV9USVRMRSxcbiAgICAgIG5leHRQYWdlVGl0bGU6IG9wdGlvbnMubmV4dFBhZ2VUaXRsZSB8fCBDb25zdC5ORVhUX1BBR0VfVElUTEUsXG4gICAgICBmaXJzdFBhZ2VUaXRsZTogb3B0aW9ucy5maXJzdFBhZ2VUaXRsZSB8fCBDb25zdC5GSVJTVF9QQUdFX1RJVExFLFxuICAgICAgbGFzdFBhZ2VUaXRsZTogb3B0aW9ucy5sYXN0UGFnZVRpdGxlIHx8IENvbnN0LkxBU1RfUEFHRV9USVRMRSxcbiAgICAgIG9uUGFnZUNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2VQYWdlLFxuICAgICAgb25TaXplUGVyUGFnZUNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSxcbiAgICB9O1xuICB9O1xuXG4gIHNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyID0gKHJlbW90ZUVtaXR0ZXI6IGFueSkgPT4ge1xuICAgIHRoaXMucmVtb3RlRW1pdHRlciA9IHJlbW90ZUVtaXR0ZXI7XG4gIH07XG5cbiAgZ2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIgPSAoKSA9PlxuICAgIHRoaXMucmVtb3RlRW1pdHRlciB8fCB0aGlzLnByb3BzLnJlbW90ZUVtaXR0ZXI7XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKG5leHRQcm9wczogYW55KSB7XG4gICAgY29uc3QgeyBjdXN0b20gfSA9IG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnM7XG5cbiAgICAvLyB1c2VyIHNob3VsZCBhbGlnbiB0aGUgcGFnZSB3aGVuIHRoZSBwYWdlIGlzIG5vdCBmaXQgdG8gdGhlIGRhdGEgc2l6ZSB3aGVuIHJlbW90ZSBlbmFibGVcbiAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSB8fCBjdXN0b20pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy5wYWdlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIHRoaXMuY3VyclBhZ2UgPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnBhZ2U7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wcy5wYWdpbmF0aW9uLm9wdGlvbnMuc2l6ZVBlclBhZ2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgLy8gdGhpcy5jdXJyU2l6ZVBlclBhZ2UgPSBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnNpemVQZXJQYWdlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcHMucGFnaW5hdGlvbi5vcHRpb25zLnRvdGFsU2l6ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyB0aGlzLmRhdGFTaXplID0gbmV4dFByb3BzLnBhZ2luYXRpb24ub3B0aW9ucy50b3RhbFNpemU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNSZW1vdGVQYWdpbmF0aW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGUgPSB7IHJlc3VsdDogdW5kZWZpbmVkIH07XG4gICAgdGhpcy5yZW1vdGVFbWl0dGVyPy5lbWl0KFwiaXNSZW1vdGVQYWdpbmF0aW9uXCIsIGUpO1xuICAgIHJldHVybiBlLnJlc3VsdDtcbiAgfTtcblxuICBoYW5kbGVEYXRhU2l6ZUNoYW5nZShuZXdEYXRhU2l6ZTogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMucGFnaW5hdGlvbiEub3B0aW9ucyE7XG4gICAgY29uc3QgcGFnZVN0YXJ0SW5kZXggPVxuICAgICAgdHlwZW9mIG9wdGlvbnMucGFnZVN0YXJ0SW5kZXggPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5QQUdFX1NUQVJUX0lOREVYXG4gICAgICAgIDogb3B0aW9ucy5wYWdlU3RhcnRJbmRleDtcbiAgICB0aGlzLmN1cnJQYWdlID0gYWxpZ25QYWdlKFxuICAgICAgbmV3RGF0YVNpemUsXG4gICAgICB0aGlzLmRhdGFTaXplLFxuICAgICAgdGhpcy5jdXJyUGFnZSxcbiAgICAgIHRoaXMuY3VyclNpemVQZXJQYWdlLFxuICAgICAgcGFnZVN0YXJ0SW5kZXhcbiAgICApO1xuICAgIHRoaXMuZGF0YVNpemUgPSBuZXdEYXRhU2l6ZTtcbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2VQYWdlKGN1cnJQYWdlOiBhbnkpIHtcbiAgICBjb25zdCB7IGN1cnJTaXplUGVyUGFnZSB9ID0gdGhpcztcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcblxuICAgIGlmIChvcHRpb25zLm9uUGFnZUNoYW5nZSkge1xuICAgICAgb3B0aW9ucy5vblBhZ2VDaGFuZ2UoY3VyclBhZ2UsIGN1cnJTaXplUGVyUGFnZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyUGFnZSA9IGN1cnJQYWdlO1xuXG4gICAgaWYgKHRoaXMuaXNSZW1vdGVQYWdpbmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuZ2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIoKS5lbWl0KFxuICAgICAgICBcInBhZ2luYXRpb25DaGFuZ2VcIixcbiAgICAgICAgY3VyclBhZ2UsXG4gICAgICAgIGN1cnJTaXplUGVyUGFnZVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UoY3VyclNpemVQZXJQYWdlOiBhbnksIGN1cnJQYWdlOiBhbnkpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uIS5vcHRpb25zITtcblxuICAgIGlmIChvcHRpb25zLm9uU2l6ZVBlclBhZ2VDaGFuZ2UpIHtcbiAgICAgIG9wdGlvbnMub25TaXplUGVyUGFnZUNoYW5nZShjdXJyU2l6ZVBlclBhZ2UsIGN1cnJQYWdlKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJQYWdlID0gY3VyclBhZ2U7XG4gICAgdGhpcy5jdXJyU2l6ZVBlclBhZ2UgPSBjdXJyU2l6ZVBlclBhZ2U7XG5cbiAgICBpZiAodGhpcy5pc1JlbW90ZVBhZ2luYXRpb24oKSkge1xuICAgICAgdGhpcy5nZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlcigpLmVtaXQoXG4gICAgICAgIFwicGFnaW5hdGlvbkNoYW5nZVwiLFxuICAgICAgICBjdXJyUGFnZSxcbiAgICAgICAgY3VyclNpemVQZXJQYWdlXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgcGFnaW5hdGlvblByb3BzID0gdGhpcy5nZXRQYWdpbmF0aW9uUHJvcHMoKTtcbiAgICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgICAgLi4udGhpcy5wcm9wcy5wYWdpbmF0aW9uLFxuICAgICAgb3B0aW9uczogcGFnaW5hdGlvblByb3BzLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0YXRlQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgIHBhZ2luYXRpb25Qcm9wcyxcbiAgICAgICAgICBwYWdpbmF0aW9uVGFibGVQcm9wczoge1xuICAgICAgICAgICAgcGFnaW5hdGlvbixcbiAgICAgICAgICAgIHNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyOiB0aGlzLnNldFBhZ2luYXRpb25SZW1vdGVFbWl0dGVyLFxuICAgICAgICAgICAgZGF0YUNoYW5nZUxpc3RlbmVyOiB0aGlzLmRhdGFDaGFuZ2VMaXN0ZW5lcixcbiAgICAgICAgICB9LFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvU3RhdGVDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gKHtcbiAgUHJvdmlkZXI6IFN0YXRlUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBTdGF0ZUNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX187IiwiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChhcmcpIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIHBhcnNlVmFsdWUoYXJnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZVZhbHVlIChhcmcpIHtcblx0XHRpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRDbGFzcyAodmFsdWUsIG5ld0NsYXNzKSB7XG5cdFx0aWYgKCFuZXdDbGFzcykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyAnICcgKyBuZXdDbGFzcztcblx0XHR9XG5cdFxuXHRcdHJldHVybiB2YWx1ZSArIG5ld0NsYXNzO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5ODcpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJSZWZsZWN0T3duS2V5cyIsIlIiLCJSZWZsZWN0IiwiUmVmbGVjdEFwcGx5IiwiYXBwbHkiLCJ0YXJnZXQiLCJyZWNlaXZlciIsImFyZ3MiLCJGdW5jdGlvbiIsInByb3RvdHlwZSIsImNhbGwiLCJvd25LZXlzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImNvbmNhdCIsIk51bWJlcklzTmFOIiwiTnVtYmVyIiwiaXNOYU4iLCJ2YWx1ZSIsIkV2ZW50RW1pdHRlciIsImluaXQiLCJ0aGlzIiwib25jZSIsImVtaXR0ZXIiLCJuYW1lIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJlcnJvckxpc3RlbmVyIiwiZXJyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZXNvbHZlciIsInNsaWNlIiwiYXJndW1lbnRzIiwiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwiaGFuZGxlciIsImZsYWdzIiwib24iLCJhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlciIsIl9ldmVudHMiLCJ1bmRlZmluZWQiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImNoZWNrTGlzdGVuZXIiLCJsaXN0ZW5lciIsIlR5cGVFcnJvciIsIl9nZXRNYXhMaXN0ZW5lcnMiLCJ0aGF0IiwiX2FkZExpc3RlbmVyIiwidHlwZSIsInByZXBlbmQiLCJtIiwiZXZlbnRzIiwiZXhpc3RpbmciLCJ3YXJuaW5nIiwiY3JlYXRlIiwibmV3TGlzdGVuZXIiLCJlbWl0IiwidW5zaGlmdCIsInB1c2giLCJsZW5ndGgiLCJ3YXJuZWQiLCJ3IiwiRXJyb3IiLCJTdHJpbmciLCJjb3VudCIsImNvbnNvbGUiLCJ3YXJuIiwib25jZVdyYXBwZXIiLCJmaXJlZCIsIndyYXBGbiIsIl9vbmNlV3JhcCIsInN0YXRlIiwid3JhcHBlZCIsImJpbmQiLCJfbGlzdGVuZXJzIiwidW53cmFwIiwiZXZsaXN0ZW5lciIsImFyciIsInJldCIsIkFycmF5IiwiaSIsInVud3JhcExpc3RlbmVycyIsImFycmF5Q2xvbmUiLCJsaXN0ZW5lckNvdW50IiwibiIsImNvcHkiLCJhZGRFdmVudExpc3RlbmVyIiwid3JhcExpc3RlbmVyIiwiYXJnIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInNldCIsIlJhbmdlRXJyb3IiLCJnZXRQcm90b3R5cGVPZiIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImRvRXJyb3IiLCJlcnJvciIsImVyIiwibWVzc2FnZSIsImNvbnRleHQiLCJsZW4iLCJsaXN0ZW5lcnMiLCJhZGRMaXN0ZW5lciIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0IiwicG9zaXRpb24iLCJvcmlnaW5hbExpc3RlbmVyIiwic2hpZnQiLCJpbmRleCIsInBvcCIsInNwbGljZU9uZSIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsImtleSIsImtleXMiLCJyYXdMaXN0ZW5lcnMiLCJldmVudE5hbWVzIiwiUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lIiwiUGFnaW5hdGlvblRvdGFsU3RhbmRhbG9uZSIsIlNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lIiwib3B0aW9ucyIsImNyZWF0ZUNvbnRleHQiLCJQcm92aWRlciIsIkNvbnN1bWVyIiwiUGFnaW5hdGlvblByb3ZpZGVyIiwicHJvcHMiLCJwYWdpbmF0aW9uUHJvcHMiLCJjaGlsZHJlbiIsIlBBR0lOQVRJT05fU0laRSIsIlBBR0VfU1RBUlRfSU5ERVgiLCJXaXRoX0ZJUlNUX0FORF9MQVNUIiwiU0hPV19BTExfUEFHRV9CVE5TIiwiU0hPV19UT1RBTCIsIlBBR0lOQVRJT05fVE9UQUwiLCJGSVJTVF9QQUdFX1RFWFQiLCJQUkVfUEFHRV9URVhUIiwiTkVYVF9QQUdFX1RFWFQiLCJMQVNUX1BBR0VfVEVYVCIsIk5FWFRfUEFHRV9USVRMRSIsIkxBU1RfUEFHRV9USVRMRSIsIlBSRV9QQUdFX1RJVExFIiwiRklSU1RfUEFHRV9USVRMRSIsIlNJWkVfUEVSX1BBR0VfTElTVCIsIkhJREVfU0laRV9QRVJfUEFHRSIsIkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0UiLCJQYWdpbmF0aW9uRGF0YUNvbnRleHQiLCJQYWdpbmF0aW9uRGF0YVByb3ZpZGVyIiwiY29tcG9uZW50RGlkVXBkYXRlIiwibmV4dFByb3BzIiwic3VwZXIiLCJjdXJyU2l6ZVBlclBhZ2UiLCJjdXN0b20iLCJvblBhZ2VDaGFuZ2UiLCJwYWdpbmF0aW9uIiwicGFnZVN0YXJ0SW5kZXgiLCJpc1JlbW90ZVBhZ2luYXRpb24iLCJuZXdQYWdlIiwiYWxpZ25QYWdlIiwiZGF0YSIsImN1cnJQYWdlIiwib25EYXRhU2l6ZUNoYW5nZSIsImRhdGFTaXplIiwicmVuZGVyRGVmYXVsdFBhZ2luYXRpb24iLCJwYWdlIiwic2l6ZVBlclBhZ2UiLCJyZXN0IiwiZ2V0UGFnaW5hdGlvblByb3BzIiwicmVuZGVyIiwidG90YWxQYWdlcyIsIk1hdGgiLCJmbG9vciIsImdldEJ5Q3VyclBhZ2UiLCJzZXRSZW1vdGVFbWl0dGVyIiwic2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIiLCJQYWdlQnV0dG9uIiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJoYW5kbGVDbGljayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInRpdGxlIiwiYWN0aXZlIiwiZGlzYWJsZWQiLCJjbGFzc05hbWUiLCJjbGFzc2VzIiwiaHJlZiIsIm9uQ2xpY2siLCJFeHRlbmRCYXNlIiwiYmFja1RvUHJldlBhZ2UiLCJpbml0aWFsU3RhdGUiLCJjYWxjdWxhdGVUb3RhbFBhZ2UiLCJsYXN0UGFnZSIsImNhbGN1bGF0ZUxhc3RQYWdlIiwiY2VpbCIsImNhbGN1bGF0ZUZyb21UbyIsIm9mZnNldCIsImFicyIsImZyb20iLCJ0byIsIm1pbiIsImNhbGN1bGF0ZVBhZ2VzIiwicGFnaW5hdGlvblNpemUiLCJ3aXRoRmlyc3RBbmRMYXN0IiwiZmlyc3RQYWdlVGV4dCIsInByZVBhZ2VUZXh0IiwibmV4dFBhZ2VUZXh0IiwibGFzdFBhZ2VUZXh0IiwiYWx3YXlzU2hvd0FsbEJ0bnMiLCJwYWdlcyIsImVuZFBhZ2UiLCJzdGFydFBhZ2UiLCJtYXgiLCJjYWxjdWxhdGVQYWdlU3RhdHVzIiwiZGlzYWJsZVBhZ2VUaXRsZSIsImlzU3RhcnQiLCJpc0VuZCIsImZpbHRlciIsIm1hcCIsIm5leHRQYWdlVGl0bGUiLCJwcmVQYWdlVGl0bGUiLCJmaXJzdFBhZ2VUaXRsZSIsImxhc3RQYWdlVGl0bGUiLCJwYWdlUmVzdWx0IiwiY2FsY3VsYXRlU2l6ZVBlclBhZ2VTdGF0dXMiLCJzaXplUGVyUGFnZUxpc3QiLCJfc2l6ZVBlclBhZ2UiLCJ0ZXh0IiwiZW5kSW5kZXgiLCJnZXROb3JtYWxpemVkUGFnZSIsInByZXZEYXRhU2l6ZSIsImVuZCIsInN0YXJ0Iiwic3RhcnRJbmRleCIsInJlc3VsdCIsIldyYXBwZWRDb21wb25lbnQiLCJoYW5kbGVDaGFuZ2VQYWdlIiwiaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UiLCJjdXJyUHJvcHMiLCJ0b3RhbFNpemUiLCJzZXRTdGF0ZSIsIm9uU2l6ZVBlclBhZ2VDaGFuZ2UiLCJzZWxlY3RlZFNpemUiLCJwYXJzZUludCIsIm5ld1RvdGFsUGFnZXMiLCJuZXdMYXN0UGFnZSIsInBhZ2luYXRpb25MaXN0QWRhcHRlciIsInBhZ2VCdXR0b25SZW5kZXJlciIsImhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlIiwiUGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlciIsInBhZ2VQcm9wcyIsImVsZW1lbnQiLCJjbG9uZUVsZW1lbnQiLCJwYWdpbmF0aW9uVG90YWxBZGFwdGVyIiwicGFnaW5hdGlvblRvdGFsUmVuZGVyZXIiLCJQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlciIsIlBhZ2luYXRpb24iLCJ0YWJsZUlkIiwic2hvd1RvdGFsIiwicGFnZUxpc3RSZW5kZXJlciIsImhpZGVTaXplUGVyUGFnZSIsInNpemVQZXJQYWdlUmVuZGVyZXIiLCJzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyIiwiYm9vdHN0cmFwNCIsImJvb3RzdHJhcDUiLCJwYWdlTGlzdENsYXNzIiwiU2l6ZVBlclBhZ2VEcm9wZG93bldpdGhBZGFwdGVyIiwic3RhdGljIiwic2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIiLCJkcm9wZG93bk9wZW4iLCJjbG9zZURyb3BEb3duIiwidG9nZ2xlRHJvcERvd24iLCJvcGVuIiwib3B0aW9uUmVuZGVyZXIiLCJvbkJsdXIiLCJzaXplUGVyUGFnZURyb3BEb3duRGVmYXVsdFByb3BzIiwiaGlkZGVuIiwiYnRuQ29udGV4dHVhbCIsInZhcmlhdGlvbiIsIm9wZW5DbGFzcyIsImRyb3Bkb3duQ2xhc3NlcyIsImlkIiwic3R5bGUiLCJ2aXNpYmlsaXR5Iiwicm9sZSIsIm9wdGlvbiIsInRhYkluZGV4Iiwib25Nb3VzZURvd24iLCJTdGF0ZUNvbnRleHQiLCJTdGF0ZVByb3ZpZGVyIiwiZGF0YUNoYW5nZUxpc3RlbmVyIiwicmVtb3RlRW1pdHRlciIsImhhbmRsZURhdGFTaXplQ2hhbmdlIiwiZ2V0UGFnaW5hdGlvblJlbW90ZUVtaXR0ZXIiLCJuZXdEYXRhU2l6ZSIsImZvcmNlVXBkYXRlIiwicGFnaW5hdGlvblRhYmxlUHJvcHMiLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsImNsYXNzTmFtZXMiLCJhcHBlbmRDbGFzcyIsInBhcnNlVmFsdWUiLCJpc0FycmF5IiwidG9TdHJpbmciLCJpbmNsdWRlcyIsIm5ld0NsYXNzIiwiZGVmYXVsdCIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwic291cmNlUm9vdCI6IiJ9
|
|
2
|
+
!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.ReactBootstrapTableNgPaginator=t(require("react")):e.ReactBootstrapTableNgPaginator=t(e.React)}(self,e=>{return t={7(e){"use strict";var t,a="object"==typeof Reflect?Reflect:null,n=a&&"function"==typeof a.apply?a.apply:function(e,t,a){return Function.prototype.apply.call(e,t,a)};t=a&&"function"==typeof a.ownKeys?a.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise(function(a,n){function r(a){e.removeListener(t,i),n(a)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",r),a([].slice.call(arguments))}p(e,t,i,{once:!0}),"error"!==t&&function(e,t,a){"function"==typeof e.on&&p(e,"error",t,a)}(e,r,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var o=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,a,n){var r,i,o,u;if(s(a),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,a.listener?a.listener:a),i=e._events),o=i[t]),void 0===o)o=i[t]=a,++e._eventsCount;else if("function"==typeof o?o=i[t]=n?[a,o]:[o,a]:n?o.unshift(a):o.push(a),(r=l(e))>0&&o.length>r&&!o.warned){o.warned=!0;var g=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");g.name="MaxListenersExceededWarning",g.emitter=e,g.type=t,g.count=o.length,u=g,console&&console.warn&&console.warn(u)}return e}function g(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,a){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:a},r=g.bind(n);return r.listener=a,n.wrapFn=r,r}function P(e,t,a){var n=e._events;if(void 0===n)return[];var r=n[t];return void 0===r?[]:"function"==typeof r?a?[r.listener||r]:[r]:a?function(e){for(var t=new Array(e.length),a=0;a<t.length;++a)t[a]=e[a].listener||e[a];return t}(r):c(r,r.length)}function f(e){var t=this._events;if(void 0!==t){var a=t[e];if("function"==typeof a)return 1;if(void 0!==a)return a.length}return 0}function c(e,t){for(var a=new Array(t),n=0;n<t;++n)a[n]=e[n];return a}function p(e,t,a,n){if("function"==typeof e.on)n.once?e.once(t,a):e.on(t,a);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function r(i){n.once&&e.removeEventListener(t,r),a(i)})}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");o=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return l(this)},i.prototype.emit=function(e){for(var t=[],a=1;a<arguments.length;a++)t.push(arguments[a]);var r="error"===e,i=this._events;if(void 0!==i)r=r&&void 0===i.error;else if(!r)return!1;if(r){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var s=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw s.context=o,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)n(l,this,t);else{var u=l.length,g=c(l,u);for(a=0;a<u;++a)n(g[a],this,t)}return!0},i.prototype.addListener=function(e,t){return u(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return u(this,e,t,!0)},i.prototype.once=function(e,t){return s(t),this.on(e,d(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,d(this,e,t)),this},i.prototype.removeListener=function(e,t){var a,n,r,i,o;if(s(t),void 0===(n=this._events))return this;if(void 0===(a=n[e]))return this;if(a===t||a.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,a.listener||t));else if("function"!=typeof a){for(r=-1,i=a.length-1;i>=0;i--)if(a[i]===t||a[i].listener===t){o=a[i].listener,r=i;break}if(r<0)return this;0===r?a.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(a,r),1===a.length&&(n[e]=a[0]),void 0!==n.removeListener&&this.emit("removeListener",e,o||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,a,n;if(void 0===(a=this._events))return this;if(void 0===a.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==a[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete a[e]),this;if(0===arguments.length){var r,i=Object.keys(a);for(n=0;n<i.length;++n)"removeListener"!==(r=i[n])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=a[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},i.prototype.listeners=function(e){return P(this,e,!0)},i.prototype.rawListeners=function(e){return P(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):f.call(e,t)},i.prototype.listenerCount=f,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},987(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SizePerPageDropdownStandalone=t.PaginationTotalStandalone=t.PaginationListStandalone=t.PaginationProvider=void 0;const l=s(a(442)),u=s(a(320)),g=s(a(657));t.PaginationListStandalone=g.default;const d=s(a(991));t.PaginationTotalStandalone=d.default;const P=s(a(429));t.SizePerPageDropdownStandalone=P.default;const f=o(a(973));t.default=(e={})=>({createContext:u.default,options:e});const{Provider:c}=(0,f.default)();t.PaginationProvider=e=>l.default.createElement(c,{...e},l.default.createElement(f.StateContext.Consumer,null,t=>e.children(t)))},971(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={PAGINATION_SIZE:5,PAGE_START_INDEX:1,With_FIRST_AND_LAST:!0,SHOW_ALL_PAGE_BTNS:!1,SHOW_TOTAL:!1,PAGINATION_TOTAL:null,FIRST_PAGE_TEXT:"<<",PRE_PAGE_TEXT:"<",NEXT_PAGE_TEXT:">",LAST_PAGE_TEXT:">>",NEXT_PAGE_TITLE:"next page",LAST_PAGE_TITLE:"last page",PRE_PAGE_TITLE:"previous page",FIRST_PAGE_TITLE:"first page",SIZE_PER_PAGE_LIST:[10,25,30,50],HIDE_SIZE_PER_PAGE:!1,HIDE_PAGE_LIST_ONLY_ONE_PAGE:!1}},320(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(971)),o=a(933),s=n(a(38)),l=a(323),u=r.default.createContext(null),g=r.default.forwardRef((e,t)=>{const{data:a,pagination:n,onDataSizeChange:g,children:d}=e,{currPage:P,setCurrPage:f,currSizePerPage:c,getPaginationProps:p,isRemotePagination:h,remoteEmitterRef:_}=(0,l.usePaginationState)(e);r.default.useImperativeHandle(t,()=>({currPage:P,currSizePerPage:c}));const T=r.default.useRef(a.length);r.default.useEffect(()=>{const e=n.options,{custom:t,onPageChange:r}=e,s=void 0!==e.pageStartIndex?e.pageStartIndex:i.default.PAGE_START_INDEX;if(!h()&&!t){const e=(0,o.alignPage)(a.length,T.current,P,c,s);P!==e&&(r&&r(e,c),f(e))}g&&a.length!==T.current&&g({dataSize:T.current}),T.current=a.length},[a.length,n,g,P,c,h,f]);const v=n.options,S=v.sizePerPage??c,m=void 0===v.pageStartIndex?i.default.PAGE_START_INDEX:v.pageStartIndex;let E=a,b=v.page??P;if(!h()&&E.length<=(b-1)*S){const e=Math.floor(E.length/S)+1;b=b>e?e:P}const y=h()?E:(0,o.getByCurrPage)(E,b,S,m);return r.default.createElement(u.Provider,{value:{data:y,setRemoteEmitter:e=>{_.current=e}}},d,(()=>{if(!v.custom){const{page:e,sizePerPage:t,dataSize:n,...i}=p();return r.default.createElement(s.default,{...i,key:"pagination",dataSize:n||a.length,currPage:e,currSizePerPage:t})}return null})())});t.default=()=>({Provider:g,Consumer:u.Consumer})},464(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.usePagination=void 0;const r=a(442),i=n(a(971));t.usePagination=e=>{const{currPage:t,currSizePerPage:a,dataSize:n,pageStartIndex:o,paginationSize:s,withFirstAndLast:l,firstPageText:u,prePageText:g,nextPageText:d,lastPageText:P,alwaysShowAllBtns:f,sizePerPageList:c,onPageChange:p,onSizePerPageChange:h,nextPageTitle:_=i.default.NEXT_PAGE_TITLE,prePageTitle:T=i.default.PRE_PAGE_TITLE,firstPageTitle:v=i.default.FIRST_PAGE_TITLE,lastPageTitle:S=i.default.LAST_PAGE_TITLE,disablePageTitle:m=!1}=e,E=(0,r.useMemo)(()=>Math.ceil(n/a),[n,a]),b=(0,r.useMemo)(()=>o+E-1,[o,E]),y=(0,r.useCallback)(()=>t-1<o?o:t-1,[t,o]),x=(0,r.useCallback)(()=>{let e=[],a=E;if(a<=0)return[];let n=Math.max(t-Math.floor(s/2),o);a=n+s-1,a>b&&(a=b,n=a-s+1),f||n!==o&&E>s?l?(e.push({type:"first",page:u}),e.push({type:"pre",page:g})):e.push({type:"pre",page:g}):E>1&&0===e.length&&e.push({type:"pre",page:g});for(let t=n;t<=a;t+=1)t>=o&&e.push({type:"page",page:t});return(f||a<=b&&e.length>1)&&e.push({type:"next",page:d}),l&&(f||a<=b&&e.length>1)&&e.push({type:"last",page:P}),e},[t,s,o,l,u,g,d,P,f,E,b]),A=(0,r.useCallback)(()=>{const e=x(),a=e=>t===o&&("first"===e.type||"pre"===e.type),n=e=>t===b&&("next"===e.type||"last"===e.type);return e.filter(e=>!!f||!(a(e)||n(e))).map(e=>{let r;const i=e.page===t,o=a(e)||n(e);r="next"===e.type?_:"pre"===e.type?T:"first"===e.type?v:"last"===e.type?S:`${e.page}`;const s={page:e.page,active:i,disabled:o,title:r};return m||(s.title=r),s})},[x,t,o,u,g,d,P,f,b,_,T,v,S,m]),z=(0,r.useCallback)(e=>{let n;n=e===g?y():e===d?t+1>b?b:t+1:e===P?b:e===u?o:parseInt(e,10),n!==t&&p(n,a)},[y,t,o,g,d,P,u,p,b]),L=(0,r.useCallback)(e=>{const r="string"==typeof e?parseInt(e,10):e;let i=t;if(r!==a){const e=Math.ceil(n/r),t=o+e-1;i>t&&(i=t),h&&h(r,i)}},[t,a,n,o,h]),w=(0,r.useCallback)(()=>c.map(e=>({text:`${void 0!==e.text?e.text:e}`,page:void 0!==e.value?e.value:e})),[c]),C=(0,r.useMemo)(()=>{const e=Math.abs(i.default.PAGE_START_INDEX-o);let r=(t-o)*a;r=0===n?0:r+1;let s=Math.min(a*(t+e),n);return s>n&&(s=n),[r,s]},[n,t,a,o]);return{totalPages:E,lastPage:b,getPageStatus:A,handleChangePage:z,handleChangeSizePerPage:L,getSizePerPageStatus:w,fromTo:C}}},323(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.usePaginationState=void 0;const r=a(442),i=n(a(7)),o=n(a(971)),s=a(933);t.usePaginationState=e=>{const{pagination:t,bootstrap4:a,tableId:n,remoteEmitter:l}=e,u=t.options,g=u.sizePerPageList||o.default.SIZE_PER_PAGE_LIST,[d,P]=(0,r.useState)(()=>void 0!==u.page?u.page:void 0!==u.pageStartIndex?u.pageStartIndex:o.default.PAGE_START_INDEX),[f,c]=(0,r.useState)(()=>void 0!==u.sizePerPage?u.sizePerPage:"object"==typeof g[0]?g[0].value:g[0]),[p,h]=(0,r.useState)(u.totalSize),_=(0,r.useRef)(new i.default),T=(0,r.useRef)(null),v=(0,r.useRef)(e.isRemotePagination),S=(0,r.useRef)(l);(0,r.useLayoutEffect)(()=>{v.current=e.isRemotePagination,S.current=l});const m=(0,r.useCallback)(()=>{if("function"==typeof v.current)return v.current();const e={result:void 0},t=T.current||S.current;return t?.emit("isRemotePagination",e),e.result},[]),E=(0,r.useCallback)(e=>{const t=void 0===u.pageStartIndex?o.default.PAGE_START_INDEX:u.pageStartIndex;P(a=>(0,s.alignPage)(e,p,a,f,t)),h(e)},[u.pageStartIndex,p,f]);(0,r.useEffect)(()=>{const e=_.current;return e.on("filterChanged",E),()=>{e.off("filterChanged",E)}},[E]);const b=(0,r.useCallback)(e=>{if(u.onPageChange&&u.onPageChange(e,f),P(e),m()){const t=T.current||l;t?.emit("paginationChange",e,f)}},[u,f,m,l]),y=(0,r.useCallback)((e,t)=>{if(u.onSizePerPageChange&&u.onSizePerPageChange(e,t),P(t),c(e),m()){const a=T.current||l;a?.emit("paginationChange",t,e)}},[u,m,l]),x=(0,r.useCallback)(()=>{const e=m()?u.totalSize:p,t=void 0===u.withFirstAndLast?o.default.With_FIRST_AND_LAST:u.withFirstAndLast,r=void 0===u.alwaysShowAllBtns?o.default.SHOW_ALL_PAGE_BTNS:u.alwaysShowAllBtns,i=void 0===u.hideSizePerPage?o.default.HIDE_SIZE_PER_PAGE:u.hideSizePerPage,s=void 0===u.hidePageListOnlyOnePage?o.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE:u.hidePageListOnlyOnePage,l=void 0===u.pageStartIndex?o.default.PAGE_START_INDEX:u.pageStartIndex;return{...u,bootstrap4:a,tableId:n,page:u.page??d,sizePerPage:f,pageStartIndex:l,hidePageListOnlyOnePage:s,hideSizePerPage:i,alwaysShowAllBtns:r,withFirstAndLast:t,totalSize:e,dataSize:e,sizePerPageList:g,paginationSize:u.paginationSize||o.default.PAGINATION_SIZE,showTotal:u.showTotal,pageListRenderer:u.pageListRenderer,pageButtonRenderer:u.pageButtonRenderer,sizePerPageRenderer:u.sizePerPageRenderer,paginationTotalRenderer:u.paginationTotalRenderer,sizePerPageOptionRenderer:u.sizePerPageOptionRenderer,firstPageText:u.firstPageText||o.default.FIRST_PAGE_TEXT,prePageText:u.prePageText||o.default.PRE_PAGE_TEXT,nextPageText:u.nextPageText||o.default.NEXT_PAGE_TEXT,lastPageText:u.lastPageText||o.default.LAST_PAGE_TEXT,prePageTitle:u.prePageTitle||o.default.PRE_PAGE_TITLE,nextPageTitle:u.nextPageTitle||o.default.NEXT_PAGE_TITLE,firstPageTitle:u.firstPageTitle||o.default.FIRST_PAGE_TITLE,lastPageTitle:u.lastPageTitle||o.default.LAST_PAGE_TITLE,onPageChange:b,onSizePerPageChange:y}},[m,u,p,a,n,d,f,g,b,y]);return{currPage:d,setCurrPage:P,currSizePerPage:f,setCurrSizePerPage:c,dataSize:p,setDataSize:h,dataChangeListener:_.current,remoteEmitterRef:T,isRemotePagination:m,handleChangePage:b,handleChangeSizePerPage:y,getPaginationProps:x}}},374(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(942)),i=n(a(442)),o=i.default.memo(e=>{const{page:t,title:a,active:n,disabled:o,className:s,onPageChange:l}=e,u=(0,r.default)({active:n,disabled:o,"page-item":!0},s);return i.default.createElement("li",{className:u,title:a},i.default.createElement("a",{href:"#",onClick:e=>{e.preventDefault(),l(t)},className:"page-link"},t))});t.default=o},933(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getByCurrPage=t.alignPage=void 0;const r=n(a(971)),i=(e,t,a)=>((e,t)=>e+Math.abs(1-t))(e,a)*t-1;t.alignPage=(e,t,a,n,i)=>t<e?a:a<i||e<=0?i:a>=Math.floor(e/n)+i&&1===i?Math.ceil(e/n):a>=Math.floor(e/n)&&0===i?Math.ceil(e/n)-Math.abs(r.default.PAGE_START_INDEX-i):a,t.getByCurrPage=(e,t,a,n)=>{const r=e.length;if(!r)return[];const o=i(t,a,n),s=((e,t)=>e-(t-1))(o,a),l=[];for(let t=s;t<=o&&(l.push(e[t]),t+1!==r);t+=1);return l}},881(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=a(464);t.default=e=>t=>{const{currPage:a,currSizePerPage:n,dataSize:o,totalSize:s,pageStartIndex:l,paginationSize:u,withFirstAndLast:g,firstPageText:d,prePageText:P,nextPageText:f,lastPageText:c,alwaysShowAllBtns:p,onPageChange:h,onSizePerPageChange:_}=t,{totalPages:T,lastPage:v,handleChangePage:S,handleChangeSizePerPage:m}=(0,i.usePagination)({currPage:a,currSizePerPage:n,dataSize:s??o,pageStartIndex:l,paginationSize:u,withFirstAndLast:g,firstPageText:d,prePageText:P,nextPageText:f,lastPageText:c,alwaysShowAllBtns:p,onPageChange:h,onSizePerPageChange:_});return r.default.createElement(e,{...t,lastPage:v,totalPages:T,onPageChange:S,onSizePerPageChange:m})}},147(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PaginationListWithAdapter=void 0;const r=n(a(442)),i=a(464),o=n(a(285)),s=e=>t=>{const{lastPage:a,totalPages:n,pageButtonRenderer:o,onPageChange:s,disablePageTitle:l,hidePageListOnlyOnePage:u,currPage:g,currSizePerPage:d,dataSize:P,pageStartIndex:f,paginationSize:c,withFirstAndLast:p,alwaysShowAllBtns:h,firstPageText:_,prePageText:T,nextPageText:v,lastPageText:S,nextPageTitle:m,prePageTitle:E,firstPageTitle:b,lastPageTitle:y}=t,{getPageStatus:x}=(0,i.usePagination)({currPage:g,currSizePerPage:d,dataSize:P,pageStartIndex:f,paginationSize:c,withFirstAndLast:p,alwaysShowAllBtns:h,firstPageText:_,prePageText:T,nextPageText:v,lastPageText:S,sizePerPageList:t.sizePerPageList||[],onPageChange:s,nextPageTitle:m,prePageTitle:E,firstPageTitle:b,lastPageTitle:y,disablePageTitle:l}),A=x();return 1===n&&u?null:r.default.createElement(e,{pageButtonRenderer:o,onPageChange:s,pages:A})};t.PaginationListWithAdapter=s(o.default),t.default=s},657(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(285)),s=n(a(147)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},285(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(374));t.default=e=>r.default.createElement("ul",{className:"pagination react-bootstrap-table-page-btns-ul"},e.pages.map(t=>{if(e.pageButtonRenderer){const a=e.pageButtonRenderer({...t,onPageChange:e.onPageChange});return a?r.default.cloneElement(a,{key:t.page}):null}return r.default.createElement(i.default,{key:t.page,...t,onPageChange:e.onPageChange})}))},681(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PaginationTotalWithAdapter=void 0;const r=n(a(442)),i=a(464),o=n(a(519)),s=e=>t=>{const{currPage:a,currSizePerPage:n,pageStartIndex:o,dataSize:s,paginationTotalRenderer:l,paginationSize:u=5,withFirstAndLast:g=!0,alwaysShowAllBtns:d=!1,firstPageText:P="<<",prePageText:f="<",nextPageText:c=">",lastPageText:p=">>",onPageChange:h=()=>{}}=t,{fromTo:_}=(0,i.usePagination)({currPage:a,currSizePerPage:n,dataSize:s,pageStartIndex:o,paginationSize:u,withFirstAndLast:g,alwaysShowAllBtns:d,firstPageText:P,prePageText:f,nextPageText:c,lastPageText:p,sizePerPageList:t.sizePerPageList||[],onPageChange:h}),[T,v]=_;return r.default.createElement(e,{from:T,to:v,dataSize:s,paginationTotalRenderer:l})};t.PaginationTotalWithAdapter=s(o.default),t.default=s},991(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(519)),o=n(a(681)),s=n(a(885));t.default=(0,s.default)((0,o.default)(e=>r.default.createElement(i.default,{...e})))},519(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=e=>e.paginationTotalRenderer?e.paginationTotalRenderer(e.from,e.to,e.dataSize):r.default.createElement("span",{className:"react-bootstrap-table-pagination-total"}," Showing rows ",e.from," to ",e.to," of ",e.dataSize)},38(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(942)),i=n(a(442)),o=n(a(971)),s=a(147),l=a(681),u=a(527),g=a(464);t.default=e=>{const{tableId:t,currPage:a,pageStartIndex:n=o.default.PAGE_START_INDEX,showTotal:d=o.default.SHOW_TOTAL,dataSize:P,pageListRenderer:f=null,pageButtonRenderer:c=null,paginationTotalRenderer:p=o.default.PAGINATION_TOTAL,hidePageListOnlyOnePage:h=o.default.HIDE_PAGE_LIST_ONLY_ONE_PAGE,onPageChange:_,sizePerPageList:T=o.default.SIZE_PER_PAGE_LIST,currSizePerPage:v,hideSizePerPage:S=o.default.HIDE_SIZE_PER_PAGE,sizePerPageRenderer:m=null,sizePerPageOptionRenderer:E=null,onSizePerPageChange:b,bootstrap4:y=!1,bootstrap5:x=!1,disablePageTitle:A=!1,paginationSize:z=o.default.PAGINATION_SIZE,withFirstAndLast:L=o.default.With_FIRST_AND_LAST,alwaysShowAllBtns:w=o.default.SHOW_ALL_PAGE_BTNS,firstPageText:C=o.default.FIRST_PAGE_TEXT,prePageText:I=o.default.PRE_PAGE_TEXT,nextPageText:O=o.default.NEXT_PAGE_TEXT,lastPageText:R=o.default.LAST_PAGE_TEXT,nextPageTitle:M=o.default.NEXT_PAGE_TITLE,prePageTitle:N=o.default.PRE_PAGE_TITLE,firstPageTitle:j=o.default.FIRST_PAGE_TITLE,lastPageTitle:D=o.default.LAST_PAGE_TITLE,...G}=e,{totalPages:B,lastPage:F,getPageStatus:k,handleChangePage:X,handleChangeSizePerPage:W}=(0,g.usePagination)({currPage:a,currSizePerPage:v,dataSize:P,pageStartIndex:n,paginationSize:z,withFirstAndLast:L,firstPageText:C,prePageText:I,nextPageText:O,lastPageText:R,alwaysShowAllBtns:w,sizePerPageList:T,onPageChange:_,onSizePerPageChange:b,nextPageTitle:M,prePageTitle:N,firstPageTitle:j,lastPageTitle:D,disablePageTitle:A}),H=k(),Z=(0,r.default)("react-bootstrap-table-pagination-list","col-md-6 col-xs-6 col-6 col-sm-6 col-lg-6",{"react-bootstrap-table-pagination-list-hidden":h&&1===B});return i.default.createElement("div",{className:"row react-bootstrap-table-pagination"},i.default.createElement("div",{className:"col-md-6 col-xs-6 col-6 col-sm-6 col-lg-6"},i.default.createElement(u.SizePerPageDropdownWithAdapter,{bootstrap4:y,bootstrap5:x,tableId:t,sizePerPageList:T,currSizePerPage:v,hideSizePerPage:S,sizePerPageRenderer:m,sizePerPageOptionRenderer:E,onSizePerPageChange:W}),d?i.default.createElement(l.PaginationTotalWithAdapter,{currPage:a,currSizePerPage:v,pageStartIndex:n,dataSize:P,paginationTotalRenderer:p}):null),f?f({pages:H,onPageChange:X}):i.default.createElement("div",{className:Z},i.default.createElement(s.PaginationListWithAdapter,{...G,currPage:a,currSizePerPage:v,dataSize:P,pageStartIndex:n,lastPage:F,totalPages:B,pageButtonRenderer:c,onPageChange:X,paginationSize:z,withFirstAndLast:L,firstPageText:C,prePageText:I,nextPageText:O,lastPageText:R,alwaysShowAllBtns:w})))}},527(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t}),s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SizePerPageDropdownWithAdapter=void 0;const l=o(a(442)),u=a(464),g=s(a(609)),d=e=>t=>{const{tableId:a,bootstrap4:n,bootstrap5:r,sizePerPageList:i,currSizePerPage:o,hideSizePerPage:s,sizePerPageRenderer:g,sizePerPageOptionRenderer:d,onSizePerPageChange:P,currPage:f=1,dataSize:c=0,pageStartIndex:p=1,paginationSize:h=5,withFirstAndLast:_=!0,alwaysShowAllBtns:T=!1,firstPageText:v="<<",prePageText:S="<",nextPageText:m=">",lastPageText:E=">>",onPageChange:b=()=>{}}=t,[y,x]=(0,l.useState)(!1),{getSizePerPageStatus:A,handleChangeSizePerPage:z}=(0,u.usePagination)({currPage:f,currSizePerPage:o,dataSize:c,pageStartIndex:p,paginationSize:h,withFirstAndLast:_,alwaysShowAllBtns:T,firstPageText:v,prePageText:S,nextPageText:m,lastPageText:E,sizePerPageList:i,onPageChange:b,onSizePerPageChange:P}),L=(0,l.useCallback)(()=>{x(e=>!e)},[]),w=(0,l.useCallback)(()=>{x(!1)},[]),C=(0,l.useCallback)(e=>{z(e),w()},[z,w]);if(i.length>1&&!s){const i=A();return g?g({options:i,currSizePerPage:`${o}`,onSizePerPageChange:C}):l.default.createElement(e,{...t,currSizePerPage:`${o}`,options:i,optionRenderer:d,onSizePerPageChange:C,onClick:L,onBlur:w,open:y,tableId:a,bootstrap4:n,bootstrap5:r})}return null};t.SizePerPageDropdownWithAdapter=d(g.default),t.default=d},429(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442)),i=n(a(881)),o=n(a(609)),s=n(a(527)),l=n(a(885));t.default=(0,l.default)((0,i.default)((0,s.default)(e=>r.default.createElement(o.default,{...e}))))},609(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(942)),i=n(a(442)),o=n(a(869)),s={open:!1,hidden:!1,btnContextual:"btn-default btn-secondary",variation:"dropdown",className:"",optionRenderer:null,bootstrap4:!1,bootstrap5:!1,tableId:null};t.default=e=>{const{open:t,tableId:a,hidden:n,onClick:l,onBlur:u,options:g,className:d,variation:P,bootstrap4:f,bootstrap5:c,btnContextual:p,optionRenderer:h,currSizePerPage:_,onSizePerPageChange:T}={...s,...e},v=t?"open show":"",S=(0,r.default)(v,"react-bs-table-sizePerPage-dropdown",P,d),m=i.default.useId(),E=a?`${a}-pageDropDown`:`pageDropDown-${m}`;return i.default.createElement("span",{style:{visibility:n?"hidden":"visible"},className:S,"data-testid":"size-per-page-dropdown"},i.default.createElement("button",{id:E,type:"button",className:`btn ${p} dropdown-toggle`,"data-toggle":c?void 0:"dropdown","data-bs-toggle":c?"dropdown":void 0,"aria-expanded":t,onClick:l,onBlur:u},_," ",f||c?null:i.default.createElement("span",null,i.default.createElement("span",{className:"caret"}))),i.default.createElement("ul",{className:`dropdown-menu ${v}`,role:"menu","aria-labelledby":E},g.map(e=>h?h({...e,onSizePerPageChange:T}):i.default.createElement(o.default,{...e,key:e.text,bootstrap4:f,bootstrap5:c,onSizePerPageChange:T}))))}},869(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=n(a(442));t.default=({text:e,page:t,onSizePerPageChange:a,bootstrap4:n=!1,bootstrap5:i=!1})=>n||i?r.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem",className:"dropdown-item","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)},onClick:e=>{e.preventDefault()}},e):r.default.createElement("li",{key:e,role:"presentation",className:"dropdown-item"},r.default.createElement("a",{href:"#",tabIndex:-1,role:"menuitem","data-page":t,onMouseDown:e=>{e.preventDefault(),a(t)},onClick:e=>{e.preventDefault()}},e))},885(e,t,a){"use strict";var n,r=this&&this.__createBinding||(Object.create?function(e,t,a,n){void 0===n&&(n=a);var r=Object.getOwnPropertyDescriptor(t,a);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,n,r)}:function(e,t,a,n){void 0===n&&(n=a),e[n]=t[a]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[t.length]=a);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a=n(e),o=0;o<a.length;o++)"default"!==a[o]&&r(t,e,a[o]);return i(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const s=o(a(442)),l=a(973);t.default=e=>t=>{const a=(0,s.useContext)(l.StateContext),n=a?a.paginationProps:{},{page:r,sizePerPage:i,...o}=t;return s.default.createElement(e,{...n,...o,currPage:r??n.page,currSizePerPage:i??n.sizePerPage})}},973(e,t,a){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.StateContext=void 0;const r=n(a(442)),i=a(323),o=r.default.createContext(null);t.StateContext=o;const s=e=>{const{pagination:t,children:a}=e,{dataChangeListener:n,remoteEmitterRef:s,getPaginationProps:l}=(0,i.usePaginationState)(e),u=l(),g=r.default.useMemo(()=>({...t,options:u}),[t,u]);return r.default.createElement(o.Provider,{value:{paginationProps:u,paginationTableProps:{pagination:g,setPaginationRemoteEmitter:e=>{s.current=e},dataChangeListener:n}}},a)};t.default=()=>({Provider:s,Consumer:o.Consumer})},442(t){"use strict";t.exports=e},942(e,t){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e="",t=0;t<arguments.length;t++){var a=arguments[t];a&&(e=o(e,i(a)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return r.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var a in e)n.call(e,a)&&e[a]&&(t=o(t,a));return t}function o(e,t){return t?e?e+" "+t:e+t:e}e.exports?(r.default=r,e.exports=r):void 0===(a=function(){return r}.apply(t,[]))||(e.exports=a)}()}},a={},function e(n){var r=a[n];if(void 0!==r)return r.exports;var i=a[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}(987);var t,a});
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9kaXN0L3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3IuanMiLCJtYXBwaW5ncyI6IjtDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxFQUFRRyxRQUFRLFVBQ1IsbUJBQVhDLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxDQUFDLFNBQVVKLEdBQ1EsaUJBQVpDLFFBQ2RBLFFBQXdDLCtCQUFJRCxFQUFRRyxRQUFRLFVBRTVESixFQUFxQywrQkFBSUMsRUFBUUQsRUFBWSxNQUM5RCxDQVRELENBU0dPLEtBQU9DLElBQ1YsTyxxQkNhQSxJQU9JQyxFQVBBQyxFQUF1QixpQkFBWkMsUUFBdUJBLFFBQVUsS0FDNUNDLEVBQWVGLEdBQXdCLG1CQUFaQSxFQUFFRyxNQUM3QkgsRUFBRUcsTUFDRixTQUFzQkMsRUFBUUMsRUFBVUMsR0FDeEMsT0FBT0MsU0FBU0MsVUFBVUwsTUFBTU0sS0FBS0wsRUFBUUMsRUFBVUMsRUFDekQsRUFJQVAsRUFERUMsR0FBMEIsbUJBQWRBLEVBQUVVLFFBQ0NWLEVBQUVVLFFBQ1ZDLE9BQU9DLHNCQUNDLFNBQXdCUixHQUN2QyxPQUFPTyxPQUFPRSxvQkFBb0JULEdBQy9CVSxPQUFPSCxPQUFPQyxzQkFBc0JSLEdBQ3pDLEVBRWlCLFNBQXdCQSxHQUN2QyxPQUFPTyxPQUFPRSxvQkFBb0JULEVBQ3BDLEVBT0YsSUFBSVcsRUFBY0MsT0FBT0MsT0FBUyxTQUFxQkMsR0FDckQsT0FBT0EsR0FBVUEsQ0FDbkIsRUFFQSxTQUFTQyxJQUNQQSxFQUFhQyxLQUFLWCxLQUFLWSxLQUN6QixDQUNBNUIsRUFBT0QsUUFBVTJCLEVBQ2pCMUIsRUFBT0QsUUFBUThCLEtBd1lmLFNBQWNDLEVBQVNDLEdBQ3JCLE9BQU8sSUFBSUMsUUFBUSxTQUFVQyxFQUFTQyxHQUNwQyxTQUFTQyxFQUFjQyxHQUNyQk4sRUFBUU8s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QSxFQUFhelYsUUFHckIsSUFBSUMsRUFBU3FWLEVBQXlCRSxHQUFZLENBR2pEeFYsUUFBUyxDQUFDLEdBT1gsT0FIQTBWLEVBQW9CRixHQUFVdlUsS0FBS2hCLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVN1VixHQUdwRXRWLEVBQU9ELE9BQ2YsQ0NuQjBCdVYsQ0FBb0IsSyxNREYxQ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3IvaW5kZXgudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL2NvbnN0LnRzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL2RhdGEtY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvaG9va3MvdXNlUGFnaW5hdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9ob29rcy91c2VQYWdpbmF0aW9uU3RhdGUudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnZS1idXR0b24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2UudHMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi1oYW5kbGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLWxpc3QtYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi1saXN0LXN0YW5kYWxvbmUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tbGlzdC50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvcGFnaW5hdGlvbi10b3RhbC1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9wYWdpbmF0aW9uLXRvdGFsLXN0YW5kYWxvbmUudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24tdG90YWwudHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3BhZ2luYXRpb24udHN4Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1wYWdpbmF0b3Ivc3JjL3NpemUtcGVyLXBhZ2UtZHJvcGRvd24tYWRhcHRlci50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1zdGFuZGFsb25lLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zaXplLXBlci1wYWdlLWRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zaXplLXBlci1wYWdlLW9wdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLXBhZ2luYXRvci9zcmMvc3RhbmRhbG9uZS1hZGFwdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctcGFnaW5hdG9yL3NyYy9zdGF0ZS1jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgdW1kIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZU5nUGFnaW5hdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ1BhZ2luYXRvclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXykgPT4ge1xucmV0dXJuICIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKG5hbWUsIHJlc29sdmVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBlcnJvckxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgaGFuZGxlciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsICdlcnJvcicsIGhhbmRsZXIsIGZsYWdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEV2ZW50VGFyZ2V0IGRvZXMgbm90IGhhdmUgYGVycm9yYCBldmVudCBzZW1hbnRpY3MgbGlrZSBOb2RlXG4gICAgLy8gRXZlbnRFbWl0dGVycywgd2UgZG8gbm90IGxpc3RlbiBmb3IgYGVycm9yYCBldmVudHMgaGVyZS5cbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGFyZykge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBidWlsdGluIGB7IG9uY2U6IHRydWUgfWAgc3VwcG9ydCBzbyB3ZVxuICAgICAgLy8gaGF2ZSB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIoYXJnKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGVtaXR0ZXIpO1xuICB9XG59XG4iLCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFBhZ2luYXRpb25PcHRpb25zIH0gZnJvbSBcInJlYWN0LWJvb3RzdHJhcC10YWJsZS1uZ1wiO1xuXG5pbXBvcnQgY3JlYXRlRGF0YUNvbnRleHQgZnJvbSBcIi4vc3JjL2RhdGEtY29udGV4dFwiO1xuaW1wb3J0IFBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSBmcm9tIFwiLi9zcmMvcGFnaW5hdGlvbi1saXN0LXN0YW5kYWxvbmVcIjtcbmltcG9ydCBQYWdpbmF0aW9uVG90YWxTdGFuZGFsb25lIGZyb20gXCIuL3NyYy9wYWdpbmF0aW9uLXRvdGFsLXN0YW5kYWxvbmVcIjtcbmltcG9ydCBTaXplUGVyUGFnZURyb3Bkb3duU3RhbmRhbG9uZSBmcm9tIFwiLi9zcmMvc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1zdGFuZGFsb25lXCI7XG5pbXBvcnQgY3JlYXRlQmFzZUNvbnRleHQsIHsgU3RhdGVDb250ZXh0IH0gZnJvbSBcIi4vc3JjL3N0YXRlLWNvbnRleHRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uQ3R4T3B0aW9ucyB7XG4gIG9wdGlvbnM/OiBQYWdpbmF0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uQ2hpbGRQcm9wcyBleHRlbmRzIFBhZ2luYXRpb25PcHRpb25zIHtcbiAgdGFibGVJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvblByb3ZpZGVyUHJvcHMge1xuICBwYWdpbmF0aW9uPzogUGFnaW5hdGlvbkN0eE9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIC8vIFRPRE9cbiAgLy8gY2hpbGRyZW46IChjaGlsZFByb3BzOiB7XG4gIC8vICAgcGFnaW5hdGlvblByb3BzOiBQYWdpbmF0aW9uQ2hpbGRQcm9wcztcbiAgLy8gICBwYWdpbmF0aW9uVGFibGVQcm9wczogQm9vdHN0cmFwVGFibGVQcm9wcztcbiAgLy8gfSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbDtcbiAgY2hpbGRyZW46IGFueTtcbiAgdGFibGVJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYm9vdHN0cmFwND86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGJvb3RzdHJhcDU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICByZW1vdGVFbWl0dGVyOiBhbnk7XG4gIGRhdGE6IGFueVtdO1xuICBpc1JlbW90ZVBhZ2luYXRpb246IEZ1bmN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25EYXRhUHJvdmlkZXJQcm9wcyB7XG4gIGRhdGE6IGFueVtdO1xuICByZW1vdGVFbWl0dGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpc1JlbW90ZVBhZ2luYXRpb246ICgpID0+IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHBhZ2luYXRpb246IHtcbiAgICBvcHRpb25zOiB7XG4gICAgICBjdXN0b20/OiBib29sZWFuO1xuICAgICAgcGFnZVN0YXJ0SW5kZXg/OiBudW1iZXI7XG4gICAgICBvblBhZ2VDaGFuZ2U6IChuZXdQYWdlOiBhbnksIGN1cnJTaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICAgICAgc2l6ZVBlclBhZ2U/OiBudW1iZXI7XG4gICAgICBwYWdlPzogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIG9uRGF0YVNpemVDaGFuZ2U/OiAoZGF0YVNpemU6IHsgZGF0YVNpemU6IG51bWJlciB9KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9ucyA9IHt9KSA9PiAoe1xuICBjcmVhdGVDb250ZXh0OiBjcmVhdGVEYXRhQ29udGV4dCxcbiAgb3B0aW9ucyxcbn0pO1xuXG5jb25zdCB7IFByb3ZpZGVyIH0gPSBjcmVhdGVCYXNlQ29udGV4dCgpO1xuXG5jb25zdCBDdXN0b21pemFibGVQcm92aWRlcjogUmVhY3QuRkM8UGFnaW5hdGlvblByb3ZpZGVyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFByb3ZpZGVyIHsuLi5wcm9wc30+XG4gICAgICA8U3RhdGVDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICB7KGNvbnRleHQ6IGFueSkgPT4gcHJvcHMuY2hpbGRyZW4oY29udGV4dCl9XG4gICAgICA8L1N0YXRlQ29udGV4dC5Db25zdW1lcj5cbiAgICA8L1Byb3ZpZGVyPlxuICApO1xufTtcblxuXG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0aW9uUHJvdmlkZXIgPSBDdXN0b21pemFibGVQcm92aWRlcjtcbmV4cG9ydCB7XG4gIFBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSxcbiAgUGFnaW5hdGlvblRvdGFsU3RhbmRhbG9uZSxcbiAgU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBQQUdJTkFUSU9OX1NJWkU6IDUsXG4gIFBBR0VfU1RBUlRfSU5ERVg6IDEsXG4gIFdpdGhfRklSU1RfQU5EX0xBU1Q6IHRydWUsXG4gIFNIT1dfQUxMX1BBR0VfQlROUzogZmFsc2UsXG4gIFNIT1dfVE9UQUw6IGZhbHNlLFxuICBQQUdJTkFUSU9OX1RPVEFMOiBudWxsLFxuICBGSVJTVF9QQUdFX1RFWFQ6IFwiPDxcIixcbiAgUFJFX1BBR0VfVEVYVDogXCI8XCIsXG4gIE5FWFRfUEFHRV9URVhUOiBcIj5cIixcbiAgTEFTVF9QQUdFX1RFWFQ6IFwiPj5cIixcbiAgTkVYVF9QQUdFX1RJVExFOiBcIm5leHQgcGFnZVwiLFxuICBMQVNUX1BBR0VfVElUTEU6IFwibGFzdCBwYWdlXCIsXG4gIFBSRV9QQUdFX1RJVExFOiBcInByZXZpb3VzIHBhZ2VcIixcbiAgRklSU1RfUEFHRV9USVRMRTogXCJmaXJzdCBwYWdlXCIsXG4gIFNJWkVfUEVSX1BBR0VfTElTVDogWzEwLCAyNSwgMzAsIDUwXSxcbiAgSElERV9TSVpFX1BFUl9QQUdFOiBmYWxzZSxcbiAgSElERV9QQUdFX0xJU1RfT05MWV9PTkVfUEFHRTogZmFsc2UsXG59O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyUHJvcHMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHsgYWxpZ25QYWdlLCBnZXRCeUN1cnJQYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IFBhZ2luYXRpb24gZnJvbSBcIi4vcGFnaW5hdGlvblwiO1xuaW1wb3J0IGNyZWF0ZUJhc2VDb250ZXh0IGZyb20gXCIuL3N0YXRlLWNvbnRleHRcIjtcblxuaW1wb3J0IHsgdXNlUGFnaW5hdGlvblN0YXRlIH0gZnJvbSBcIi4vaG9va3MvdXNlUGFnaW5hdGlvblN0YXRlXCI7XG5cbmNvbnN0IFBhZ2luYXRpb25EYXRhQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8YW55PihudWxsKTtcblxuY29uc3QgUGFnaW5hdGlvbkRhdGFQcm92aWRlciA9IFJlYWN0LmZvcndhcmRSZWY8YW55LCBQYWdpbmF0aW9uRGF0YVByb3ZpZGVyUHJvcHM+KChwcm9wcywgcmVmKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkYXRhOiBwcm9wRGF0YSxcbiAgICBwYWdpbmF0aW9uLFxuICAgIG9uRGF0YVNpemVDaGFuZ2UsXG4gICAgY2hpbGRyZW4sXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgY3VyclBhZ2UsXG4gICAgc2V0Q3VyclBhZ2UsXG4gICAgY3VyclNpemVQZXJQYWdlLFxuICAgIGdldFBhZ2luYXRpb25Qcm9wcyxcbiAgICBpc1JlbW90ZVBhZ2luYXRpb24sXG4gICAgcmVtb3RlRW1pdHRlclJlZixcbiAgfSA9IHVzZVBhZ2luYXRpb25TdGF0ZShwcm9wcyk7XG5cbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgY3VyclBhZ2UsXG4gICAgY3VyclNpemVQZXJQYWdlLFxuICB9KSk7XG5cbiAgY29uc3QgcHJldkRhdGFMZW5ndGhSZWYgPSBSZWFjdC51c2VSZWYocHJvcERhdGEubGVuZ3RoKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBwYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgICBjb25zdCB7IGN1c3RvbSwgb25QYWdlQ2hhbmdlIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gb3B0aW9ucy5wYWdlU3RhcnRJbmRleFxuICAgICAgICA6IENvbnN0LlBBR0VfU1RBUlRfSU5ERVg7XG5cbiAgICBpZiAoIWlzUmVtb3RlUGFnaW5hdGlvbigpICYmICFjdXN0b20pIHtcbiAgICAgIGNvbnN0IG5ld1BhZ2UgPSBhbGlnblBhZ2UoXG4gICAgICAgIHByb3BEYXRhLmxlbmd0aCxcbiAgICAgICAgcHJldkRhdGFMZW5ndGhSZWYuY3VycmVudCxcbiAgICAgICAgY3VyclBhZ2UsXG4gICAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgICAgcGFnZVN0YXJ0SW5kZXhcbiAgICAgICk7XG5cbiAgICAgIGlmIChjdXJyUGFnZSAhPT0gbmV3UGFnZSkge1xuICAgICAgICBpZiAob25QYWdlQ2hhbmdlKSB7XG4gICAgICAgICAgb25QYWdlQ2hhbmdlKG5ld1BhZ2UsIGN1cnJTaXplUGVyUGFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q3VyclBhZ2UobmV3UGFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9uRGF0YVNpemVDaGFuZ2UgJiYgcHJvcERhdGEubGVuZ3RoICE9PSBwcmV2RGF0YUxlbmd0aFJlZi5jdXJyZW50KSB7XG4gICAgICBvbkRhdGFTaXplQ2hhbmdlKHsgZGF0YVNpemU6IHByZXZEYXRhTGVuZ3RoUmVmLmN1cnJlbnQgfSk7XG4gICAgfVxuICAgIHByZXZEYXRhTGVuZ3RoUmVmLmN1cnJlbnQgPSBwcm9wRGF0YS5sZW5ndGg7XG4gIH0sIFtcbiAgICBwcm9wRGF0YS5sZW5ndGgsXG4gICAgcGFnaW5hdGlvbixcbiAgICBvbkRhdGFTaXplQ2hhbmdlLFxuICAgIGN1cnJQYWdlLFxuICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICBpc1JlbW90ZVBhZ2luYXRpb24sXG4gICAgc2V0Q3VyclBhZ2UsXG4gIF0pO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSBwYWdpbmF0aW9uIS5vcHRpb25zITtcbiAgY29uc3QgZWZmZWN0aXZlQ3VyclNpemVQZXJQYWdlID0gb3B0aW9ucy5zaXplUGVyUGFnZSA/PyBjdXJyU2l6ZVBlclBhZ2U7XG4gIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgPyBDb25zdC5QQUdFX1NUQVJUX0lOREVYXG4gICAgICA6IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG5cbiAgbGV0IGRhdGEgPSBwcm9wRGF0YTtcbiAgbGV0IGVmZmVjdGl2ZUN1cnJQYWdlID0gb3B0aW9ucy5wYWdlID8/IGN1cnJQYWdlO1xuXG4gIGlmICghaXNSZW1vdGVQYWdpbmF0aW9uKCkgJiYgZGF0YS5sZW5ndGggPD0gKGVmZmVjdGl2ZUN1cnJQYWdlIC0gMSkgKiBlZmZlY3RpdmVDdXJyU2l6ZVBlclBhZ2UpIHtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5mbG9vcihkYXRhLmxlbmd0aCAvIGVmZmVjdGl2ZUN1cnJTaXplUGVyUGFnZSkgKyAxO1xuICAgIGVmZmVjdGl2ZUN1cnJQYWdlID0gZWZmZWN0aXZlQ3VyclBhZ2UgPiB0b3RhbFBhZ2VzID8gdG90YWxQYWdlcyA6IGN1cnJQYWdlO1xuICAgIC8vIE5vdGU6IFdlIGRvbid0IHVzZSBzZXRDdXJyUGFnZSBoZXJlIHRvIGF2b2lkIHJlbmRlciBsb29wcywgc2ltaWxhciB0byB0aGUgY2xhc3MgY29tcG9uZW50J3MgZGlyZWN0IGFzc2lnbm1lbnRcbiAgfVxuXG4gIGNvbnN0IHNsaWNlZERhdGEgPSBpc1JlbW90ZVBhZ2luYXRpb24oKVxuICAgID8gZGF0YVxuICAgIDogZ2V0QnlDdXJyUGFnZShkYXRhLCBlZmZlY3RpdmVDdXJyUGFnZSwgZWZmZWN0aXZlQ3VyclNpemVQZXJQYWdlLCBwYWdlU3RhcnRJbmRleCk7XG5cbiAgY29uc3QgcmVuZGVyRGVmYXVsdFBhZ2luYXRpb24gPSAoKSA9PiB7XG4gICAgaWYgKCFvcHRpb25zLmN1c3RvbSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwYWdlOiBwYWdpbmF0aW9uUGFnZSxcbiAgICAgICAgc2l6ZVBlclBhZ2U6IHBhZ2luYXRpb25TaXplUGVyUGFnZSxcbiAgICAgICAgZGF0YVNpemUsXG4gICAgICAgIC4uLnJlc3RcbiAgICAgIH0gPSBnZXRQYWdpbmF0aW9uUHJvcHMoKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYWdpbmF0aW9uXG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAga2V5PVwicGFnaW5hdGlvblwiXG4gICAgICAgICAgZGF0YVNpemU9e2RhdGFTaXplIHx8IHByb3BEYXRhLmxlbmd0aH1cbiAgICAgICAgICBjdXJyUGFnZT17cGFnaW5hdGlvblBhZ2V9XG4gICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtwYWdpbmF0aW9uU2l6ZVBlclBhZ2V9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxQYWdpbmF0aW9uRGF0YUNvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIGRhdGE6IHNsaWNlZERhdGEsXG4gICAgICAgIHNldFJlbW90ZUVtaXR0ZXI6IChlbWl0dGVyOiBhbnkpID0+IHtcbiAgICAgICAgICByZW1vdGVFbWl0dGVyUmVmLmN1cnJlbnQgPSBlbWl0dGVyO1xuICAgICAgICB9LFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICB7cmVuZGVyRGVmYXVsdFBhZ2luYXRpb24oKX1cbiAgICA8L1BhZ2luYXRpb25EYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoe1xuICBQcm92aWRlcjogUGFnaW5hdGlvbkRhdGFQcm92aWRlcixcbiAgQ29uc3VtZXI6IFBhZ2luYXRpb25EYXRhQ29udGV4dC5Db25zdW1lcixcbn0pO1xuIiwiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi4vY29uc3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VQYWdpbmF0aW9uUHJvcHMge1xuICBjdXJyUGFnZTogbnVtYmVyO1xuICBjdXJyU2l6ZVBlclBhZ2U6IG51bWJlcjtcbiAgZGF0YVNpemU6IG51bWJlcjtcbiAgcGFnZVN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgcGFnaW5hdGlvblNpemU6IG51bWJlcjtcbiAgd2l0aEZpcnN0QW5kTGFzdDogYm9vbGVhbjtcbiAgZmlyc3RQYWdlVGV4dDogc3RyaW5nO1xuICBwcmVQYWdlVGV4dDogc3RyaW5nO1xuICBuZXh0UGFnZVRleHQ6IHN0cmluZztcbiAgbGFzdFBhZ2VUZXh0OiBzdHJpbmc7XG4gIGFsd2F5c1Nob3dBbGxCdG5zOiBib29sZWFuO1xuICBzaXplUGVyUGFnZUxpc3Q6IGFueVtdO1xuICBvblBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIsIGN1cnJTaXplUGVyUGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBvblNpemVQZXJQYWdlQ2hhbmdlPzogKHNpemVQZXJQYWdlOiBudW1iZXIsIHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgbmV4dFBhZ2VUaXRsZT86IHN0cmluZztcbiAgcHJlUGFnZVRpdGxlPzogc3RyaW5nO1xuICBmaXJzdFBhZ2VUaXRsZT86IHN0cmluZztcbiAgbGFzdFBhZ2VUaXRsZT86IHN0cmluZztcbiAgZGlzYWJsZVBhZ2VUaXRsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCB1c2VQYWdpbmF0aW9uID0gKHByb3BzOiBVc2VQYWdpbmF0aW9uUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGN1cnJQYWdlLFxuICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICBkYXRhU2l6ZSxcbiAgICBwYWdlU3RhcnRJbmRleCxcbiAgICBwYWdpbmF0aW9uU2l6ZSxcbiAgICB3aXRoRmlyc3RBbmRMYXN0LFxuICAgIGZpcnN0UGFnZVRleHQsXG4gICAgcHJlUGFnZVRleHQsXG4gICAgbmV4dFBhZ2VUZXh0LFxuICAgIGxhc3RQYWdlVGV4dCxcbiAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICBzaXplUGVyUGFnZUxpc3QsXG4gICAgb25QYWdlQ2hhbmdlLFxuICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gICAgbmV4dFBhZ2VUaXRsZSA9IENvbnN0Lk5FWFRfUEFHRV9USVRMRSxcbiAgICBwcmVQYWdlVGl0bGUgPSBDb25zdC5QUkVfUEFHRV9USVRMRSxcbiAgICBmaXJzdFBhZ2VUaXRsZSA9IENvbnN0LkZJUlNUX1BBR0VfVElUTEUsXG4gICAgbGFzdFBhZ2VUaXRsZSA9IENvbnN0LkxBU1RfUEFHRV9USVRMRSxcbiAgICBkaXNhYmxlUGFnZVRpdGxlID0gZmFsc2UsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB0b3RhbFBhZ2VzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIE1hdGguY2VpbChkYXRhU2l6ZSAvIGN1cnJTaXplUGVyUGFnZSk7XG4gIH0sIFtkYXRhU2l6ZSwgY3VyclNpemVQZXJQYWdlXSk7XG5cbiAgY29uc3QgbGFzdFBhZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gcGFnZVN0YXJ0SW5kZXggKyB0b3RhbFBhZ2VzIC0gMTtcbiAgfSwgW3BhZ2VTdGFydEluZGV4LCB0b3RhbFBhZ2VzXSk7XG5cbiAgY29uc3QgYmFja1RvUHJldlBhZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmV0dXJuIGN1cnJQYWdlIC0gMSA8IHBhZ2VTdGFydEluZGV4ID8gcGFnZVN0YXJ0SW5kZXggOiBjdXJyUGFnZSAtIDE7XG4gIH0sIFtjdXJyUGFnZSwgcGFnZVN0YXJ0SW5kZXhdKTtcblxuICBjb25zdCBjYWxjdWxhdGVQYWdlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBsZXQgcGFnZXM6IGFueSA9IFtdO1xuICAgIGxldCBlbmRQYWdlID0gdG90YWxQYWdlcztcbiAgICBpZiAoZW5kUGFnZSA8PSAwKSByZXR1cm4gW107XG5cbiAgICBsZXQgc3RhcnRQYWdlID0gTWF0aC5tYXgoXG4gICAgICBjdXJyUGFnZSAtIE1hdGguZmxvb3IocGFnaW5hdGlvblNpemUgLyAyKSxcbiAgICAgIHBhZ2VTdGFydEluZGV4XG4gICAgKTtcbiAgICBlbmRQYWdlID0gc3RhcnRQYWdlICsgcGFnaW5hdGlvblNpemUgLSAxO1xuXG4gICAgaWYgKGVuZFBhZ2UgPiBsYXN0UGFnZSkge1xuICAgICAgZW5kUGFnZSA9IGxhc3RQYWdlO1xuICAgICAgc3RhcnRQYWdlID0gZW5kUGFnZSAtIHBhZ2luYXRpb25TaXplICsgMTtcbiAgICB9XG5cbiAgICBpZiAoYWx3YXlzU2hvd0FsbEJ0bnMpIHtcbiAgICAgIGlmICh3aXRoRmlyc3RBbmRMYXN0KSB7XG4gICAgICAgIHBhZ2VzLnB1c2goeyB0eXBlOiAnZmlyc3QnLCBwYWdlOiBmaXJzdFBhZ2VUZXh0IH0pO1xuICAgICAgICBwYWdlcy5wdXNoKHsgdHlwZTogJ3ByZScsIHBhZ2U6IHByZVBhZ2VUZXh0IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFnZXMucHVzaCh7IHR5cGU6ICdwcmUnLCBwYWdlOiBwcmVQYWdlVGV4dCB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0YXJ0UGFnZSAhPT0gcGFnZVN0YXJ0SW5kZXggJiYgdG90YWxQYWdlcyA+IHBhZ2luYXRpb25TaXplKSB7XG4gICAgICBpZiAod2l0aEZpcnN0QW5kTGFzdCkge1xuICAgICAgICBwYWdlcy5wdXNoKHsgdHlwZTogJ2ZpcnN0JywgcGFnZTogZmlyc3RQYWdlVGV4dCB9KTtcbiAgICAgICAgcGFnZXMucHVzaCh7IHR5cGU6ICdwcmUnLCBwYWdlOiBwcmVQYWdlVGV4dCB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhZ2VzLnB1c2goeyB0eXBlOiAncHJlJywgcGFnZTogcHJlUGFnZVRleHQgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0b3RhbFBhZ2VzID4gMSAmJiBwYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHBhZ2VzLnB1c2goeyB0eXBlOiAncHJlJywgcGFnZTogcHJlUGFnZVRleHQgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0UGFnZTsgaSA8PSBlbmRQYWdlOyBpICs9IDEpIHtcbiAgICAgIGlmIChpID49IHBhZ2VTdGFydEluZGV4KSBwYWdlcy5wdXNoKHsgdHlwZTogJ3BhZ2UnLCBwYWdlOiBpIH0pO1xuICAgIH1cblxuICAgIGlmIChhbHdheXNTaG93QWxsQnRucyB8fCAoZW5kUGFnZSA8PSBsYXN0UGFnZSAmJiBwYWdlcy5sZW5ndGggPiAxKSkge1xuICAgICAgcGFnZXMucHVzaCh7IHR5cGU6ICduZXh0JywgcGFnZTogbmV4dFBhZ2VUZXh0IH0pO1xuICAgIH1cbiAgICBpZiAod2l0aEZpcnN0QW5kTGFzdCAmJiAoYWx3YXlzU2hvd0FsbEJ0bnMgfHwgKGVuZFBhZ2UgPD0gbGFzdFBhZ2UgJiYgcGFnZXMubGVuZ3RoID4gMSkpKSB7XG4gICAgICBwYWdlcy5wdXNoKHsgdHlwZTogJ2xhc3QnLCBwYWdlOiBsYXN0UGFnZVRleHQgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2VzO1xuICB9LCBbXG4gICAgY3VyclBhZ2UsXG4gICAgcGFnaW5hdGlvblNpemUsXG4gICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICBmaXJzdFBhZ2VUZXh0LFxuICAgIHByZVBhZ2VUZXh0LFxuICAgIG5leHRQYWdlVGV4dCxcbiAgICBsYXN0UGFnZVRleHQsXG4gICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgdG90YWxQYWdlcyxcbiAgICBsYXN0UGFnZSxcbiAgXSk7XG5cbiAgY29uc3QgZ2V0UGFnZVN0YXR1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBwYWdlcyA9IGNhbGN1bGF0ZVBhZ2VzKCk7XG4gICAgY29uc3QgaXNTdGFydCA9IChwYWdlSXRlbTogYW55KSA9PlxuICAgICAgY3VyclBhZ2UgPT09IHBhZ2VTdGFydEluZGV4ICYmXG4gICAgICAocGFnZUl0ZW0udHlwZSA9PT0gJ2ZpcnN0JyB8fCBwYWdlSXRlbS50eXBlID09PSAncHJlJyk7XG4gICAgY29uc3QgaXNFbmQgPSAocGFnZUl0ZW06IGFueSkgPT5cbiAgICAgIGN1cnJQYWdlID09PSBsYXN0UGFnZSAmJlxuICAgICAgKHBhZ2VJdGVtLnR5cGUgPT09ICduZXh0JyB8fCBwYWdlSXRlbS50eXBlID09PSAnbGFzdCcpO1xuXG4gICAgcmV0dXJuIHBhZ2VzXG4gICAgICAuZmlsdGVyKChwYWdlSXRlbTogYW55KSA9PiB7XG4gICAgICAgIGlmIChhbHdheXNTaG93QWxsQnRucykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhKGlzU3RhcnQocGFnZUl0ZW0pIHx8IGlzRW5kKHBhZ2VJdGVtKSk7XG4gICAgICB9KVxuICAgICAgLm1hcCgocGFnZUl0ZW06IGFueSkgPT4ge1xuICAgICAgICBsZXQgdGl0bGU6IGFueTtcbiAgICAgICAgY29uc3QgYWN0aXZlID0gcGFnZUl0ZW0ucGFnZSA9PT0gY3VyclBhZ2U7XG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gaXNTdGFydChwYWdlSXRlbSkgfHwgaXNFbmQocGFnZUl0ZW0pO1xuXG4gICAgICAgIGlmIChwYWdlSXRlbS50eXBlID09PSAnbmV4dCcpIHtcbiAgICAgICAgICB0aXRsZSA9IG5leHRQYWdlVGl0bGU7XG4gICAgICAgIH0gZWxzZSBpZiAocGFnZUl0ZW0udHlwZSA9PT0gJ3ByZScpIHtcbiAgICAgICAgICB0aXRsZSA9IHByZVBhZ2VUaXRsZTtcbiAgICAgICAgfSBlbHNlIGlmIChwYWdlSXRlbS50eXBlID09PSAnZmlyc3QnKSB7XG4gICAgICAgICAgdGl0bGUgPSBmaXJzdFBhZ2VUaXRsZTtcbiAgICAgICAgfSBlbHNlIGlmIChwYWdlSXRlbS50eXBlID09PSAnbGFzdCcpIHtcbiAgICAgICAgICB0aXRsZSA9IGxhc3RQYWdlVGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSBgJHtwYWdlSXRlbS5wYWdlfWA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYWdlUmVzdWx0OiBhbnkgPSB7IHBhZ2U6IHBhZ2VJdGVtLnBhZ2UsIGFjdGl2ZSwgZGlzYWJsZWQsIHRpdGxlIH07XG4gICAgICAgIGlmICghZGlzYWJsZVBhZ2VUaXRsZSkge1xuICAgICAgICAgIHBhZ2VSZXN1bHQudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFnZVJlc3VsdDtcbiAgICAgIH0pO1xuICB9LCBbXG4gICAgY2FsY3VsYXRlUGFnZXMsXG4gICAgY3VyclBhZ2UsXG4gICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgZmlyc3RQYWdlVGV4dCxcbiAgICBwcmVQYWdlVGV4dCxcbiAgICBuZXh0UGFnZVRleHQsXG4gICAgbGFzdFBhZ2VUZXh0LFxuICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgIGxhc3RQYWdlLFxuICAgIG5leHRQYWdlVGl0bGUsXG4gICAgcHJlUGFnZVRpdGxlLFxuICAgIGZpcnN0UGFnZVRpdGxlLFxuICAgIGxhc3RQYWdlVGl0bGUsXG4gICAgZGlzYWJsZVBhZ2VUaXRsZSxcbiAgXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlUGFnZSA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXdQYWdlOiBhbnkpID0+IHtcbiAgICAgIGxldCBwYWdlOiBhbnk7XG4gICAgICBpZiAobmV3UGFnZSA9PT0gcHJlUGFnZVRleHQpIHtcbiAgICAgICAgcGFnZSA9IGJhY2tUb1ByZXZQYWdlKCk7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BhZ2UgPT09IG5leHRQYWdlVGV4dCkge1xuICAgICAgICBwYWdlID0gY3VyclBhZ2UgKyAxID4gbGFzdFBhZ2UgPyBsYXN0UGFnZSA6IGN1cnJQYWdlICsgMTtcbiAgICAgIH0gZWxzZSBpZiAobmV3UGFnZSA9PT0gbGFzdFBhZ2VUZXh0KSB7XG4gICAgICAgIHBhZ2UgPSBsYXN0UGFnZTtcbiAgICAgIH0gZWxzZSBpZiAobmV3UGFnZSA9PT0gZmlyc3RQYWdlVGV4dCkge1xuICAgICAgICBwYWdlID0gcGFnZVN0YXJ0SW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWdlID0gcGFyc2VJbnQobmV3UGFnZSwgMTApO1xuICAgICAgfVxuICAgICAgaWYgKHBhZ2UgIT09IGN1cnJQYWdlKSB7XG4gICAgICAgIG9uUGFnZUNoYW5nZShwYWdlLCBjdXJyU2l6ZVBlclBhZ2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgYmFja1RvUHJldlBhZ2UsXG4gICAgICBjdXJyUGFnZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgcHJlUGFnZVRleHQsXG4gICAgICBuZXh0UGFnZVRleHQsXG4gICAgICBsYXN0UGFnZVRleHQsXG4gICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgb25QYWdlQ2hhbmdlLFxuICAgICAgbGFzdFBhZ2UsXG4gICAgXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHNpemVQZXJQYWdlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkU2l6ZSA9XG4gICAgICAgIHR5cGVvZiBzaXplUGVyUGFnZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gcGFyc2VJbnQoc2l6ZVBlclBhZ2UsIDEwKVxuICAgICAgICAgIDogc2l6ZVBlclBhZ2U7XG4gICAgICBsZXQgbmV3Q3VyclBhZ2UgPSBjdXJyUGFnZTtcbiAgICAgIGlmIChzZWxlY3RlZFNpemUgIT09IGN1cnJTaXplUGVyUGFnZSkge1xuICAgICAgICBjb25zdCBuZXdUb3RhbFBhZ2VzID0gTWF0aC5jZWlsKGRhdGFTaXplIC8gc2VsZWN0ZWRTaXplKTtcbiAgICAgICAgY29uc3QgbmV3TGFzdFBhZ2UgPSBwYWdlU3RhcnRJbmRleCArIG5ld1RvdGFsUGFnZXMgLSAxO1xuICAgICAgICBpZiAobmV3Q3VyclBhZ2UgPiBuZXdMYXN0UGFnZSkgbmV3Q3VyclBhZ2UgPSBuZXdMYXN0UGFnZTtcbiAgICAgICAgaWYgKG9uU2l6ZVBlclBhZ2VDaGFuZ2UpIHtcbiAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlKHNlbGVjdGVkU2l6ZSwgbmV3Q3VyclBhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbY3VyclBhZ2UsIGN1cnJTaXplUGVyUGFnZSwgZGF0YVNpemUsIHBhZ2VTdGFydEluZGV4LCBvblNpemVQZXJQYWdlQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGdldFNpemVQZXJQYWdlU3RhdHVzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJldHVybiBzaXplUGVyUGFnZUxpc3QubWFwKChfc2l6ZVBlclBhZ2U6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcGFnZVRleHQgPVxuICAgICAgICB0eXBlb2YgX3NpemVQZXJQYWdlLnRleHQgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICA/IF9zaXplUGVyUGFnZS50ZXh0XG4gICAgICAgICAgOiBfc2l6ZVBlclBhZ2U7XG4gICAgICBjb25zdCBwYWdlTnVtYmVyID1cbiAgICAgICAgdHlwZW9mIF9zaXplUGVyUGFnZS52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgID8gX3NpemVQZXJQYWdlLnZhbHVlXG4gICAgICAgICAgOiBfc2l6ZVBlclBhZ2U7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiBgJHtwYWdlVGV4dH1gLFxuICAgICAgICBwYWdlOiBwYWdlTnVtYmVyLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSwgW3NpemVQZXJQYWdlTGlzdF0pO1xuXG4gIGNvbnN0IGZyb21UbyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKENvbnN0LlBBR0VfU1RBUlRfSU5ERVggLSBwYWdlU3RhcnRJbmRleCk7XG5cbiAgICBsZXQgZnJvbSA9IChjdXJyUGFnZSAtIHBhZ2VTdGFydEluZGV4KSAqIGN1cnJTaXplUGVyUGFnZTtcbiAgICBmcm9tID0gZGF0YVNpemUgPT09IDAgPyAwIDogZnJvbSArIDE7XG4gICAgbGV0IHRvID0gTWF0aC5taW4oY3VyclNpemVQZXJQYWdlICogKGN1cnJQYWdlICsgb2Zmc2V0KSwgZGF0YVNpemUpO1xuICAgIGlmICh0byA+IGRhdGFTaXplKSB0byA9IGRhdGFTaXplO1xuXG4gICAgcmV0dXJuIFtmcm9tLCB0b107XG4gIH0sIFtkYXRhU2l6ZSwgY3VyclBhZ2UsIGN1cnJTaXplUGVyUGFnZSwgcGFnZVN0YXJ0SW5kZXhdKTtcblxuICByZXR1cm4ge1xuICAgIHRvdGFsUGFnZXMsXG4gICAgbGFzdFBhZ2UsXG4gICAgZ2V0UGFnZVN0YXR1cyxcbiAgICBoYW5kbGVDaGFuZ2VQYWdlLFxuICAgIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLFxuICAgIGdldFNpemVQZXJQYWdlU3RhdHVzLFxuICAgIGZyb21UbyxcbiAgfTtcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCB7IGFsaWduUGFnZSB9IGZyb20gXCIuLi9wYWdlXCI7XG5cbmV4cG9ydCBjb25zdCB1c2VQYWdpbmF0aW9uU3RhdGUgPSAocHJvcHM6IGFueSkgPT4ge1xuICBjb25zdCB7IHBhZ2luYXRpb24sIGJvb3RzdHJhcDQsIHRhYmxlSWQsIHJlbW90ZUVtaXR0ZXI6IHByb3BSZW1vdGVFbWl0dGVyIH0gPSBwcm9wcztcbiAgY29uc3Qgb3B0aW9ucyA9IHBhZ2luYXRpb24hLm9wdGlvbnMhO1xuICBjb25zdCBzaXplUGVyUGFnZUxpc3QgPSBvcHRpb25zLnNpemVQZXJQYWdlTGlzdCB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1Q7XG5cbiAgY29uc3QgW2N1cnJQYWdlLCBzZXRDdXJyUGFnZV0gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnBhZ2UgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBvcHRpb25zLnBhZ2U7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gb3B0aW9ucy5wYWdlU3RhcnRJbmRleDtcbiAgICByZXR1cm4gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWDtcbiAgfSk7XG5cbiAgY29uc3QgW2N1cnJTaXplUGVyUGFnZSwgc2V0Q3VyclNpemVQZXJQYWdlXSA9IHVzZVN0YXRlKCgpID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2l6ZVBlclBhZ2UgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBvcHRpb25zLnNpemVQZXJQYWdlO1xuICAgIGlmICh0eXBlb2Ygc2l6ZVBlclBhZ2VMaXN0WzBdID09PSBcIm9iamVjdFwiKSByZXR1cm4gKHNpemVQZXJQYWdlTGlzdFswXSBhcyBhbnkpLnZhbHVlO1xuICAgIHJldHVybiBzaXplUGVyUGFnZUxpc3RbMF0gYXMgbnVtYmVyO1xuICB9KTtcblxuICBjb25zdCBbZGF0YVNpemUsIHNldERhdGFTaXplXSA9IHVzZVN0YXRlKG9wdGlvbnMudG90YWxTaXplKTtcblxuICBjb25zdCBkYXRhQ2hhbmdlTGlzdGVuZXJSZWYgPSB1c2VSZWYobmV3IEV2ZW50RW1pdHRlcigpKTtcbiAgY29uc3QgcmVtb3RlRW1pdHRlclJlZiA9IHVzZVJlZjxhbnk+KG51bGwpO1xuXG4gIC8vIFN0b3JlIHRoZSBsYXRlc3QgaXNSZW1vdGVQYWdpbmF0aW9uIHByb3AgaW4gYSByZWYgdG8gYXZvaWQgdW5zdGFibGUgZnVuY3Rpb24gcmVmZXJlbmNlc1xuICAvLyAoZS5nLiB3aGVuIHRoZSBjYWxsZXIgcGFzc2VzIGFuIGlubGluZSBhcnJvdyBmdW5jdGlvbiBsaWtlIGAoKSA9PiBmYWxzZWApLlxuICBjb25zdCBpc1JlbW90ZVBhZ2luYXRpb25Qcm9wUmVmID0gdXNlUmVmKHByb3BzLmlzUmVtb3RlUGFnaW5hdGlvbik7XG4gIGNvbnN0IHByb3BSZW1vdGVFbWl0dGVyUmVmID0gdXNlUmVmKHByb3BSZW1vdGVFbWl0dGVyKTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpc1JlbW90ZVBhZ2luYXRpb25Qcm9wUmVmLmN1cnJlbnQgPSBwcm9wcy5pc1JlbW90ZVBhZ2luYXRpb247XG4gICAgcHJvcFJlbW90ZUVtaXR0ZXJSZWYuY3VycmVudCA9IHByb3BSZW1vdGVFbWl0dGVyO1xuICB9KTtcblxuICAvLyBTdGFibGUgY2FsbGJhY2sg4oCTIG5ldmVyIGNoYW5nZXMgaWRlbnRpdHksIHJlYWRzIGxhdGVzdCBwcm9wIHZhbHVlcyB2aWEgcmVmcy5cbiAgY29uc3QgaXNSZW1vdGVQYWdpbmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaXNSZW1vdGVQYWdpbmF0aW9uUHJvcFJlZi5jdXJyZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBpc1JlbW90ZVBhZ2luYXRpb25Qcm9wUmVmLmN1cnJlbnQoKTtcbiAgICB9XG4gICAgY29uc3QgZSA9IHsgcmVzdWx0OiB1bmRlZmluZWQgfTtcbiAgICBjb25zdCBlbWl0dGVyID0gcmVtb3RlRW1pdHRlclJlZi5jdXJyZW50IHx8IHByb3BSZW1vdGVFbWl0dGVyUmVmLmN1cnJlbnQ7XG4gICAgZW1pdHRlcj8uZW1pdChcImlzUmVtb3RlUGFnaW5hdGlvblwiLCBlKTtcbiAgICByZXR1cm4gZS5yZXN1bHQ7XG4gIH0sIFtdKTsgLy8gW10g4oCTIGludGVudGlvbmFsbHkgc3RhYmxlXG5cbiAgY29uc3QgaGFuZGxlRGF0YVNpemVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3RGF0YVNpemU6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcGFnZVN0YXJ0SW5kZXggPVxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5wYWdlU3RhcnRJbmRleCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgID8gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWFxuICAgICAgICAgIDogb3B0aW9ucy5wYWdlU3RhcnRJbmRleDtcblxuICAgICAgc2V0Q3VyclBhZ2UoKHByZXZQYWdlOiBudW1iZXIpID0+XG4gICAgICAgIGFsaWduUGFnZShcbiAgICAgICAgICBuZXdEYXRhU2l6ZSxcbiAgICAgICAgICBkYXRhU2l6ZSxcbiAgICAgICAgICBwcmV2UGFnZSxcbiAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICAgICAgcGFnZVN0YXJ0SW5kZXhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHNldERhdGFTaXplKG5ld0RhdGFTaXplKTtcbiAgICB9LFxuICAgIFtvcHRpb25zLnBhZ2VTdGFydEluZGV4LCBkYXRhU2l6ZSwgY3VyclNpemVQZXJQYWdlXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZW1pdHRlciA9IGRhdGFDaGFuZ2VMaXN0ZW5lclJlZi5jdXJyZW50O1xuICAgIGVtaXR0ZXIub24oXCJmaWx0ZXJDaGFuZ2VkXCIsIGhhbmRsZURhdGFTaXplQ2hhbmdlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZW1pdHRlci5vZmYoXCJmaWx0ZXJDaGFuZ2VkXCIsIGhhbmRsZURhdGFTaXplQ2hhbmdlKTtcbiAgICB9O1xuICB9LCBbaGFuZGxlRGF0YVNpemVDaGFuZ2VdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2VQYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHBhZ2U6IGFueSkgPT4ge1xuICAgICAgaWYgKG9wdGlvbnMub25QYWdlQ2hhbmdlKSB7XG4gICAgICAgIG9wdGlvbnMub25QYWdlQ2hhbmdlKHBhZ2UsIGN1cnJTaXplUGVyUGFnZSk7XG4gICAgICB9XG5cbiAgICAgIHNldEN1cnJQYWdlKHBhZ2UpO1xuXG4gICAgICBpZiAoaXNSZW1vdGVQYWdpbmF0aW9uKCkpIHtcbiAgICAgICAgY29uc3QgZW1pdHRlciA9IHJlbW90ZUVtaXR0ZXJSZWYuY3VycmVudCB8fCBwcm9wUmVtb3RlRW1pdHRlcjtcbiAgICAgICAgZW1pdHRlcj8uZW1pdChcInBhZ2luYXRpb25DaGFuZ2VcIiwgcGFnZSwgY3VyclNpemVQZXJQYWdlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvcHRpb25zLCBjdXJyU2l6ZVBlclBhZ2UsIGlzUmVtb3RlUGFnaW5hdGlvbiwgcHJvcFJlbW90ZUVtaXR0ZXJdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoc2l6ZVBlclBhZ2U6IGFueSwgcGFnZTogYW55KSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5vblNpemVQZXJQYWdlQ2hhbmdlKSB7XG4gICAgICAgIG9wdGlvbnMub25TaXplUGVyUGFnZUNoYW5nZShzaXplUGVyUGFnZSwgcGFnZSk7XG4gICAgICB9XG5cbiAgICAgIHNldEN1cnJQYWdlKHBhZ2UpO1xuICAgICAgc2V0Q3VyclNpemVQZXJQYWdlKHNpemVQZXJQYWdlKTtcblxuICAgICAgaWYgKGlzUmVtb3RlUGFnaW5hdGlvbigpKSB7XG4gICAgICAgIGNvbnN0IGVtaXR0ZXIgPSByZW1vdGVFbWl0dGVyUmVmLmN1cnJlbnQgfHwgcHJvcFJlbW90ZUVtaXR0ZXI7XG4gICAgICAgIGVtaXR0ZXI/LmVtaXQoXCJwYWdpbmF0aW9uQ2hhbmdlXCIsIHBhZ2UsIHNpemVQZXJQYWdlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvcHRpb25zLCBpc1JlbW90ZVBhZ2luYXRpb24sIHByb3BSZW1vdGVFbWl0dGVyXVxuICApO1xuXG4gIGNvbnN0IGdldFBhZ2luYXRpb25Qcm9wcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlZmZlY3RpdmVEYXRhU2l6ZSA9IGlzUmVtb3RlUGFnaW5hdGlvbigpID8gb3B0aW9ucy50b3RhbFNpemUhIDogZGF0YVNpemUhO1xuICAgIGNvbnN0IHdpdGhGaXJzdEFuZExhc3QgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMud2l0aEZpcnN0QW5kTGFzdCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LldpdGhfRklSU1RfQU5EX0xBU1RcbiAgICAgICAgOiBvcHRpb25zLndpdGhGaXJzdEFuZExhc3Q7XG4gICAgY29uc3QgYWx3YXlzU2hvd0FsbEJ0bnMgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuYWx3YXlzU2hvd0FsbEJ0bnMgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5TSE9XX0FMTF9QQUdFX0JUTlNcbiAgICAgICAgOiBvcHRpb25zLmFsd2F5c1Nob3dBbGxCdG5zO1xuICAgIGNvbnN0IGhpZGVTaXplUGVyUGFnZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5oaWRlU2l6ZVBlclBhZ2UgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBDb25zdC5ISURFX1NJWkVfUEVSX1BBR0VcbiAgICAgICAgOiBvcHRpb25zLmhpZGVTaXplUGVyUGFnZTtcbiAgICBjb25zdCBoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5oaWRlUGFnZUxpc3RPbmx5T25lUGFnZSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IENvbnN0LkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0VcbiAgICAgICAgOiBvcHRpb25zLmhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlO1xuICAgIGNvbnN0IHBhZ2VTdGFydEluZGV4ID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnBhZ2VTdGFydEluZGV4ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWFxuICAgICAgICA6IG9wdGlvbnMucGFnZVN0YXJ0SW5kZXg7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGJvb3RzdHJhcDQsXG4gICAgICB0YWJsZUlkLFxuICAgICAgcGFnZTogb3B0aW9ucy5wYWdlID8/IGN1cnJQYWdlLFxuICAgICAgc2l6ZVBlclBhZ2U6IGN1cnJTaXplUGVyUGFnZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UsXG4gICAgICBoaWRlU2l6ZVBlclBhZ2UsXG4gICAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICAgIHdpdGhGaXJzdEFuZExhc3QsXG4gICAgICB0b3RhbFNpemU6IGVmZmVjdGl2ZURhdGFTaXplLFxuICAgICAgZGF0YVNpemU6IGVmZmVjdGl2ZURhdGFTaXplLFxuICAgICAgc2l6ZVBlclBhZ2VMaXN0LFxuICAgICAgcGFnaW5hdGlvblNpemU6IG9wdGlvbnMucGFnaW5hdGlvblNpemUgfHwgQ29uc3QuUEFHSU5BVElPTl9TSVpFLFxuICAgICAgc2hvd1RvdGFsOiBvcHRpb25zLnNob3dUb3RhbCxcbiAgICAgIHBhZ2VMaXN0UmVuZGVyZXI6IG9wdGlvbnMucGFnZUxpc3RSZW5kZXJlcixcbiAgICAgIHBhZ2VCdXR0b25SZW5kZXJlcjogb3B0aW9ucy5wYWdlQnV0dG9uUmVuZGVyZXIsXG4gICAgICBzaXplUGVyUGFnZVJlbmRlcmVyOiBvcHRpb25zLnNpemVQZXJQYWdlUmVuZGVyZXIsXG4gICAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcjogb3B0aW9ucy5wYWdpbmF0aW9uVG90YWxSZW5kZXJlcixcbiAgICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXI6IG9wdGlvbnMuc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcixcbiAgICAgIGZpcnN0UGFnZVRleHQ6IG9wdGlvbnMuZmlyc3RQYWdlVGV4dCB8fCBDb25zdC5GSVJTVF9QQUdFX1RFWFQsXG4gICAgICBwcmVQYWdlVGV4dDogb3B0aW9ucy5wcmVQYWdlVGV4dCB8fCBDb25zdC5QUkVfUEFHRV9URVhULFxuICAgICAgbmV4dFBhZ2VUZXh0OiBvcHRpb25zLm5leHRQYWdlVGV4dCB8fCBDb25zdC5ORVhUX1BBR0VfVEVYVCxcbiAgICAgIGxhc3RQYWdlVGV4dDogb3B0aW9ucy5sYXN0UGFnZVRleHQgfHwgQ29uc3QuTEFTVF9QQUdFX1RFWFQsXG4gICAgICBwcmVQYWdlVGl0bGU6IG9wdGlvbnMucHJlUGFnZVRpdGxlIHx8IENvbnN0LlBSRV9QQUdFX1RJVExFLFxuICAgICAgbmV4dFBhZ2VUaXRsZTogb3B0aW9ucy5uZXh0UGFnZVRpdGxlIHx8IENvbnN0Lk5FWFRfUEFHRV9USVRMRSxcbiAgICAgIGZpcnN0UGFnZVRpdGxlOiBvcHRpb25zLmZpcnN0UGFnZVRpdGxlIHx8IENvbnN0LkZJUlNUX1BBR0VfVElUTEUsXG4gICAgICBsYXN0UGFnZVRpdGxlOiBvcHRpb25zLmxhc3RQYWdlVGl0bGUgfHwgQ29uc3QuTEFTVF9QQUdFX1RJVExFLFxuICAgICAgb25QYWdlQ2hhbmdlOiBoYW5kbGVDaGFuZ2VQYWdlLFxuICAgICAgb25TaXplUGVyUGFnZUNoYW5nZTogaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UsXG4gICAgfTtcbiAgfSwgW1xuICAgIGlzUmVtb3RlUGFnaW5hdGlvbixcbiAgICBvcHRpb25zLFxuICAgIGRhdGFTaXplLFxuICAgIGJvb3RzdHJhcDQsXG4gICAgdGFibGVJZCxcbiAgICBjdXJyUGFnZSxcbiAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgc2l6ZVBlclBhZ2VMaXN0LFxuICAgIGhhbmRsZUNoYW5nZVBhZ2UsXG4gICAgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UsXG4gIF0pO1xuXG4gIHJldHVybiB7XG4gICAgY3VyclBhZ2UsXG4gICAgc2V0Q3VyclBhZ2UsXG4gICAgY3VyclNpemVQZXJQYWdlLFxuICAgIHNldEN1cnJTaXplUGVyUGFnZSxcbiAgICBkYXRhU2l6ZSxcbiAgICBzZXREYXRhU2l6ZSxcbiAgICBkYXRhQ2hhbmdlTGlzdGVuZXI6IGRhdGFDaGFuZ2VMaXN0ZW5lclJlZi5jdXJyZW50LFxuICAgIHJlbW90ZUVtaXR0ZXJSZWYsXG4gICAgaXNSZW1vdGVQYWdpbmF0aW9uLFxuICAgIGhhbmRsZUNoYW5nZVBhZ2UsXG4gICAgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UsXG4gICAgZ2V0UGFnaW5hdGlvblByb3BzLFxuICB9O1xufTtcbiIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbmltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgUGFnZUJ1dHRvblByb3BzIHtcbiAgb25QYWdlQ2hhbmdlOiAocGFnZTogYW55KSA9PiB2b2lkO1xuICBwYWdlOiBSZWFjdC5SZWFjdE5vZGUgfCBudW1iZXIgfCBzdHJpbmc7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IFBhZ2VCdXR0b246IFJlYWN0LkZDPFBhZ2VCdXR0b25Qcm9wcz4gPSBSZWFjdC5tZW1vKChwcm9wcykgPT4ge1xuICBjb25zdCB7IHBhZ2UsIHRpdGxlLCBhY3RpdmUsIGRpc2FibGVkLCBjbGFzc05hbWUsIG9uUGFnZUNoYW5nZSB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudDxIVE1MQW5jaG9yRWxlbWVudD4pID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgb25QYWdlQ2hhbmdlKHBhZ2UpO1xuICB9O1xuXG4gIGNvbnN0IGNsYXNzZXMgPSBjcyhcbiAgICB7XG4gICAgICBhY3RpdmUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIFwicGFnZS1pdGVtXCI6IHRydWUsXG4gICAgfSxcbiAgICBjbGFzc05hbWVcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzZXN9IHRpdGxlPXt0aXRsZX0+XG4gICAgICA8YSBocmVmPVwiI1wiIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfSBjbGFzc05hbWU9XCJwYWdlLWxpbmtcIj5cbiAgICAgICAge3BhZ2V9XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgKTtcbn0pO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgUGFnZUJ1dHRvbjtcbiIsImltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuXG5jb25zdCBnZXROb3JtYWxpemVkUGFnZSA9IChwYWdlOiBhbnksIHBhZ2VTdGFydEluZGV4OiBhbnkpID0+IHtcbiAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMoMSAtIHBhZ2VTdGFydEluZGV4KTtcbiAgcmV0dXJuIHBhZ2UgKyBvZmZzZXQ7XG59O1xuXG5jb25zdCBlbmRJbmRleCA9IChwYWdlOiBhbnksIHNpemVQZXJQYWdlOiBhbnksIHBhZ2VTdGFydEluZGV4OiBhbnkpID0+XG4gIGdldE5vcm1hbGl6ZWRQYWdlKHBhZ2UsIHBhZ2VTdGFydEluZGV4KSAqIHNpemVQZXJQYWdlIC0gMTtcblxuY29uc3Qgc3RhcnRJbmRleCA9IChlbmQ6IGFueSwgc2l6ZVBlclBhZ2U6IGFueSkgPT4gZW5kIC0gKHNpemVQZXJQYWdlIC0gMSk7XG5cbmV4cG9ydCBjb25zdCBhbGlnblBhZ2UgPSAoXG4gIGRhdGFTaXplOiBhbnksXG4gIHByZXZEYXRhU2l6ZTogYW55LFxuICBwYWdlOiBhbnksXG4gIHNpemVQZXJQYWdlOiBhbnksXG4gIHBhZ2VTdGFydEluZGV4OiBhbnlcbikgPT4ge1xuICBpZiAocHJldkRhdGFTaXplIDwgZGF0YVNpemUpIHJldHVybiBwYWdlO1xuICBpZiAocGFnZSA8IHBhZ2VTdGFydEluZGV4KSByZXR1cm4gcGFnZVN0YXJ0SW5kZXg7XG4gIGlmIChkYXRhU2l6ZSA8PSAwKSByZXR1cm4gcGFnZVN0YXJ0SW5kZXg7XG4gIGlmIChcbiAgICBwYWdlID49IE1hdGguZmxvb3IoZGF0YVNpemUgLyBzaXplUGVyUGFnZSkgKyBwYWdlU3RhcnRJbmRleCAmJlxuICAgIHBhZ2VTdGFydEluZGV4ID09PSAxXG4gICkge1xuICAgIHJldHVybiBNYXRoLmNlaWwoZGF0YVNpemUgLyBzaXplUGVyUGFnZSk7XG4gIH1cbiAgaWYgKHBhZ2UgPj0gTWF0aC5mbG9vcihkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKSAmJiBwYWdlU3RhcnRJbmRleCA9PT0gMCkge1xuICAgIGNvbnN0IG5ld1BhZ2UgPSBNYXRoLmNlaWwoZGF0YVNpemUgLyBzaXplUGVyUGFnZSk7XG4gICAgcmV0dXJuIG5ld1BhZ2UgLSBNYXRoLmFicyhDb25zdC5QQUdFX1NUQVJUX0lOREVYIC0gcGFnZVN0YXJ0SW5kZXgpO1xuICB9XG4gIHJldHVybiBwYWdlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJ5Q3VyclBhZ2UgPSAoXG4gIGRhdGE6IGFueSxcbiAgcGFnZTogYW55LFxuICBzaXplUGVyUGFnZTogYW55LFxuICBwYWdlU3RhcnRJbmRleDogYW55XG4pID0+IHtcbiAgY29uc3QgZGF0YVNpemUgPSBkYXRhLmxlbmd0aDtcbiAgaWYgKCFkYXRhU2l6ZSkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGVuZCA9IGVuZEluZGV4KHBhZ2UsIHNpemVQZXJQYWdlLCBwYWdlU3RhcnRJbmRleCk7XG4gIGNvbnN0IHN0YXJ0ID0gc3RhcnRJbmRleChlbmQsIHNpemVQZXJQYWdlKTtcblxuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSArPSAxKSB7XG4gICAgcmVzdWx0LnB1c2goZGF0YVtpXSk7XG4gICAgaWYgKGkgKyAxID09PSBkYXRhU2l6ZSkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgRkMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVBhZ2luYXRpb24gfSBmcm9tIFwiLi9ob29rcy91c2VQYWdpbmF0aW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+IHtcbiAgY29uc3QgUGFnaW5hdGlvbkhhbmRsZXI6IEZDPGFueT4gPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyUGFnZSxcbiAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgIGRhdGFTaXplLFxuICAgICAgdG90YWxTaXplLFxuICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICBwYWdpbmF0aW9uU2l6ZSxcbiAgICAgIHdpdGhGaXJzdEFuZExhc3QsXG4gICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgcHJlUGFnZVRleHQsXG4gICAgICBuZXh0UGFnZVRleHQsXG4gICAgICBsYXN0UGFnZVRleHQsXG4gICAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICAgIG9uUGFnZUNoYW5nZSxcbiAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgY29uc3Qge1xuICAgICAgdG90YWxQYWdlcyxcbiAgICAgIGxhc3RQYWdlLFxuICAgICAgaGFuZGxlQ2hhbmdlUGFnZSxcbiAgICAgIGhhbmRsZUNoYW5nZVNpemVQZXJQYWdlLFxuICAgIH0gPSB1c2VQYWdpbmF0aW9uKHtcbiAgICAgIGN1cnJQYWdlLFxuICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgZGF0YVNpemU6IHRvdGFsU2l6ZSA/PyBkYXRhU2l6ZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgcGFnaW5hdGlvblNpemUsXG4gICAgICB3aXRoRmlyc3RBbmRMYXN0LFxuICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgbmV4dFBhZ2VUZXh0LFxuICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICAgIH0gYXMgYW55KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGxhc3RQYWdlPXtsYXN0UGFnZX1cbiAgICAgICAgdG90YWxQYWdlcz17dG90YWxQYWdlc31cbiAgICAgICAgb25QYWdlQ2hhbmdlPXtoYW5kbGVDaGFuZ2VQYWdlfVxuICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXtoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gUGFnaW5hdGlvbkhhbmRsZXI7XG59O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgdXNlUGFnaW5hdGlvbiB9IGZyb20gXCIuL2hvb2tzL3VzZVBhZ2luYXRpb25cIjtcbmltcG9ydCBQYWdpbmF0aW9uTGlzdCBmcm9tIFwiLi9wYWdpbmF0aW9uLWxpc3RcIjtcblxuY29uc3QgcGFnaW5hdGlvbkxpc3RBZGFwdGVyID0gKFdyYXBwZWRDb21wb25lbnQ6IGFueSkgPT4ge1xuICByZXR1cm4gKHByb3BzOiBhbnkpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBsYXN0UGFnZSxcbiAgICAgIHRvdGFsUGFnZXMsXG4gICAgICBwYWdlQnV0dG9uUmVuZGVyZXIsXG4gICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICBkaXNhYmxlUGFnZVRpdGxlLFxuICAgICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UsXG4gICAgICBjdXJyUGFnZSxcbiAgICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICAgIGRhdGFTaXplLFxuICAgICAgcGFnZVN0YXJ0SW5kZXgsXG4gICAgICBwYWdpbmF0aW9uU2l6ZSxcbiAgICAgIHdpdGhGaXJzdEFuZExhc3QsXG4gICAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICAgIGZpcnN0UGFnZVRleHQsXG4gICAgICBwcmVQYWdlVGV4dCxcbiAgICAgIG5leHRQYWdlVGV4dCxcbiAgICAgIGxhc3RQYWdlVGV4dCxcbiAgICAgIG5leHRQYWdlVGl0bGUsXG4gICAgICBwcmVQYWdlVGl0bGUsXG4gICAgICBmaXJzdFBhZ2VUaXRsZSxcbiAgICAgIGxhc3RQYWdlVGl0bGUsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgY29uc3QgeyBnZXRQYWdlU3RhdHVzIH0gPSB1c2VQYWdpbmF0aW9uKHtcbiAgICAgIGN1cnJQYWdlLFxuICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgZGF0YVNpemUsXG4gICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgIHBhZ2luYXRpb25TaXplLFxuICAgICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgbmV4dFBhZ2VUZXh0LFxuICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgc2l6ZVBlclBhZ2VMaXN0OiBwcm9wcy5zaXplUGVyUGFnZUxpc3QgfHwgW10sXG4gICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICBuZXh0UGFnZVRpdGxlLFxuICAgICAgcHJlUGFnZVRpdGxlLFxuICAgICAgZmlyc3RQYWdlVGl0bGUsXG4gICAgICBsYXN0UGFnZVRpdGxlLFxuICAgICAgZGlzYWJsZVBhZ2VUaXRsZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhZ2VzID0gZ2V0UGFnZVN0YXR1cygpO1xuXG4gICAgaWYgKHRvdGFsUGFnZXMgPT09IDEgJiYgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICBwYWdlQnV0dG9uUmVuZGVyZXI9e3BhZ2VCdXR0b25SZW5kZXJlcn1cbiAgICAgICAgb25QYWdlQ2hhbmdlPXtvblBhZ2VDaGFuZ2V9XG4gICAgICAgIHBhZ2VzPXtwYWdlc31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0aW9uTGlzdFdpdGhBZGFwdGVyID0gcGFnaW5hdGlvbkxpc3RBZGFwdGVyKFBhZ2luYXRpb25MaXN0KTtcbmV4cG9ydCBkZWZhdWx0IHBhZ2luYXRpb25MaXN0QWRhcHRlcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQYWdpbmF0aW9uSGFuZGxlciBmcm9tIFwiLi9wYWdpbmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCBQYWdpbmF0aW9uTGlzdCBmcm9tIFwiLi9wYWdpbmF0aW9uLWxpc3RcIjtcbmltcG9ydCBwYWdpbmF0aW9uTGlzdEFkYXB0ZXIgZnJvbSBcIi4vcGFnaW5hdGlvbi1saXN0LWFkYXB0ZXJcIjtcbmltcG9ydCBzdGFuZGFsb25lQWRhcHRlciBmcm9tIFwiLi9zdGFuZGFsb25lLWFkYXB0ZXJcIjtcblxuY29uc3QgUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lID0gKHByb3BzOiBhbnkpID0+IDxQYWdpbmF0aW9uTGlzdCB7Li4ucHJvcHN9IC8+O1xuXG5leHBvcnQgZGVmYXVsdCBzdGFuZGFsb25lQWRhcHRlcihcbiAgUGFnaW5hdGlvbkhhbmRsZXIocGFnaW5hdGlvbkxpc3RBZGFwdGVyKFBhZ2luYXRpb25MaXN0U3RhbmRhbG9uZSkpXG4pO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBQYWdlQnV0dG9uIGZyb20gXCIuL3BhZ2UtYnV0dG9uXCI7XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uTGlzdFByb3BzIHtcbiAgcGFnZXM6IEFycmF5PHtcbiAgICBwYWdlOiBSZWFjdC5SZWFjdE5vZGUgfCBudW1iZXIgfCBzdHJpbmc7XG4gICAgYWN0aXZlPzogYm9vbGVhbjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gIH0+O1xuICBvblBhZ2VDaGFuZ2U6IChwYWdlOiBhbnkpID0+IHZvaWQ7XG4gIHBhZ2VCdXR0b25SZW5kZXJlcj86IChwcm9wczogYW55KSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudWxsO1xufVxuXG5jb25zdCBQYWdpbmF0b25MaXN0ID0gKHByb3BzOiBQYWdpbmF0aW9uTGlzdFByb3BzKSA9PiAoXG4gIDx1bCBjbGFzc05hbWU9XCJwYWdpbmF0aW9uIHJlYWN0LWJvb3RzdHJhcC10YWJsZS1wYWdlLWJ0bnMtdWxcIj5cbiAgICB7cHJvcHMucGFnZXMubWFwKChwYWdlUHJvcHM6IGFueSkgPT4ge1xuICAgICAgaWYgKHByb3BzLnBhZ2VCdXR0b25SZW5kZXJlcikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcHJvcHMucGFnZUJ1dHRvblJlbmRlcmVyKHtcbiAgICAgICAgICAuLi5wYWdlUHJvcHMsXG4gICAgICAgICAgb25QYWdlQ2hhbmdlOiBwcm9wcy5vblBhZ2VDaGFuZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZWxlbWVudCA/IFJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7IGtleTogcGFnZVByb3BzLnBhZ2UgfSkgOiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFBhZ2VCdXR0b25cbiAgICAgICAgICBrZXk9e3BhZ2VQcm9wcy5wYWdlfVxuICAgICAgICAgIHsuLi5wYWdlUHJvcHN9XG4gICAgICAgICAgb25QYWdlQ2hhbmdlPXtwcm9wcy5vblBhZ2VDaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0pfVxuICA8L3VsPlxuKTtcblxuXG5leHBvcnQgZGVmYXVsdCBQYWdpbmF0b25MaXN0O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVBhZ2luYXRpb24gfSBmcm9tIFwiLi9ob29rcy91c2VQYWdpbmF0aW9uXCI7XG5pbXBvcnQgUGFnaW5hdGlvblRvdGFsIGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWxcIjtcblxuY29uc3QgcGFnaW5hdGlvblRvdGFsQWRhcHRlciA9IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+IHtcbiAgcmV0dXJuIChwcm9wczogYW55KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY3VyclBhZ2UsXG4gICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgIGRhdGFTaXplLFxuICAgICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXIsXG4gICAgICAvLyBEZWZhdWx0IHZhbHVlcyBmcm9tIHVzZVBhZ2luYXRpb25TdGF0ZSBvciBwcm9wc1xuICAgICAgcGFnaW5hdGlvblNpemUgPSA1LFxuICAgICAgd2l0aEZpcnN0QW5kTGFzdCA9IHRydWUsXG4gICAgICBhbHdheXNTaG93QWxsQnRucyA9IGZhbHNlLFxuICAgICAgZmlyc3RQYWdlVGV4dCA9IFwiPDxcIixcbiAgICAgIHByZVBhZ2VUZXh0ID0gXCI8XCIsXG4gICAgICBuZXh0UGFnZVRleHQgPSBcIj5cIixcbiAgICAgIGxhc3RQYWdlVGV4dCA9IFwiPj5cIixcbiAgICAgIG9uUGFnZUNoYW5nZSA9ICgpID0+IHt9LFxuICAgIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IHsgZnJvbVRvIH0gPSB1c2VQYWdpbmF0aW9uKHtcbiAgICAgIGN1cnJQYWdlLFxuICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgZGF0YVNpemUsXG4gICAgICBwYWdlU3RhcnRJbmRleCxcbiAgICAgIHBhZ2luYXRpb25TaXplLFxuICAgICAgd2l0aEZpcnN0QW5kTGFzdCxcbiAgICAgIGFsd2F5c1Nob3dBbGxCdG5zLFxuICAgICAgZmlyc3RQYWdlVGV4dCxcbiAgICAgIHByZVBhZ2VUZXh0LFxuICAgICAgbmV4dFBhZ2VUZXh0LFxuICAgICAgbGFzdFBhZ2VUZXh0LFxuICAgICAgc2l6ZVBlclBhZ2VMaXN0OiBwcm9wcy5zaXplUGVyUGFnZUxpc3QgfHwgW10sXG4gICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBbZnJvbSwgdG9dID0gZnJvbVRvO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgIGZyb209e2Zyb219XG4gICAgICAgIHRvPXt0b31cbiAgICAgICAgZGF0YVNpemU9e2RhdGFTaXplfVxuICAgICAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcj17cGFnaW5hdGlvblRvdGFsUmVuZGVyZXJ9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGlvblRvdGFsV2l0aEFkYXB0ZXIgPVxuICBwYWdpbmF0aW9uVG90YWxBZGFwdGVyKFBhZ2luYXRpb25Ub3RhbCk7XG5leHBvcnQgZGVmYXVsdCBwYWdpbmF0aW9uVG90YWxBZGFwdGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFBhZ2luYXRpb25Ub3RhbCBmcm9tIFwiLi9wYWdpbmF0aW9uLXRvdGFsXCI7XG5pbXBvcnQgcGFnaW5hdGlvblRvdGFsQWRhcHRlciBmcm9tIFwiLi9wYWdpbmF0aW9uLXRvdGFsLWFkYXB0ZXJcIjtcbmltcG9ydCBzdGFuZGFsb25lQWRhcHRlciBmcm9tIFwiLi9zdGFuZGFsb25lLWFkYXB0ZXJcIjtcblxuY29uc3QgUGFnaW5hdGlvblRvdGFsU3RhbmRhbG9uZSA9IChwcm9wczogYW55KSA9PiAoXG4gIDxQYWdpbmF0aW9uVG90YWwgey4uLnByb3BzfSAvPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgc3RhbmRhbG9uZUFkYXB0ZXIoXG4gIHBhZ2luYXRpb25Ub3RhbEFkYXB0ZXIoUGFnaW5hdGlvblRvdGFsU3RhbmRhbG9uZSlcbik7XG4iLCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIFBhZ2luYXRpb25Ub3RhbFByb3BzIHtcbiAgZnJvbTogbnVtYmVyO1xuICB0bzogbnVtYmVyO1xuICBkYXRhU2l6ZTogbnVtYmVyO1xuICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcj86IChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIGRhdGFTaXplOiBudW1iZXIpID0+IFJlYWN0LlJlYWN0RWxlbWVudCB8IG51bGw7XG59XG5cbmNvbnN0IFBhZ2luYXRpb25Ub3RhbCA9IChwcm9wczogUGFnaW5hdGlvblRvdGFsUHJvcHMpID0+IHtcbiAgaWYgKHByb3BzLnBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyKSB7XG4gICAgcmV0dXJuIHByb3BzLnBhZ2luYXRpb25Ub3RhbFJlbmRlcmVyKHByb3BzLmZyb20sIHByb3BzLnRvLCBwcm9wcy5kYXRhU2l6ZSk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8c3BhbiBjbGFzc05hbWU9XCJyZWFjdC1ib290c3RyYXAtdGFibGUtcGFnaW5hdGlvbi10b3RhbFwiPlxuICAgICAgJm5ic3A7U2hvd2luZyByb3dzIHtwcm9wcy5mcm9tfSB0byZuYnNwO3twcm9wcy50b30gb2YmbmJzcDtcbiAgICAgIHtwcm9wcy5kYXRhU2l6ZX1cbiAgICA8L3NwYW4+XG4gICk7XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRpb25Ub3RhbDtcbiIsIi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBhcnJvdy1ib2R5LXN0eWxlOiAwICovXG5pbXBvcnQgY3MgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDb25zdCBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlciB9IGZyb20gXCIuL3BhZ2luYXRpb24tbGlzdC1hZGFwdGVyXCI7XG5pbXBvcnQgeyBQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlciB9IGZyb20gXCIuL3BhZ2luYXRpb24tdG90YWwtYWRhcHRlclwiO1xuaW1wb3J0IHsgU2l6ZVBlclBhZ2VEcm9wZG93bldpdGhBZGFwdGVyIH0gZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1kcm9wZG93bi1hZGFwdGVyXCI7XG5pbXBvcnQgeyB1c2VQYWdpbmF0aW9uIH0gZnJvbSBcIi4vaG9va3MvdXNlUGFnaW5hdGlvblwiO1xuXG5jb25zdCBQYWdpbmF0aW9uOiBSZWFjdC5GQzxhbnk+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0YWJsZUlkLFxuICAgIGN1cnJQYWdlLFxuICAgIHBhZ2VTdGFydEluZGV4ID0gQ29uc3QuUEFHRV9TVEFSVF9JTkRFWCxcbiAgICBzaG93VG90YWwgPSBDb25zdC5TSE9XX1RPVEFMLFxuICAgIGRhdGFTaXplLFxuICAgIHBhZ2VMaXN0UmVuZGVyZXIgPSBudWxsLFxuICAgIHBhZ2VCdXR0b25SZW5kZXJlciA9IG51bGwsXG4gICAgcGFnaW5hdGlvblRvdGFsUmVuZGVyZXIgPSBDb25zdC5QQUdJTkFUSU9OX1RPVEFMLFxuICAgIGhpZGVQYWdlTGlzdE9ubHlPbmVQYWdlID0gQ29uc3QuSElERV9QQUdFX0xJU1RfT05MWV9PTkVfUEFHRSxcbiAgICBvblBhZ2VDaGFuZ2UsXG4gICAgc2l6ZVBlclBhZ2VMaXN0ID0gQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNULFxuICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICBoaWRlU2l6ZVBlclBhZ2UgPSBDb25zdC5ISURFX1NJWkVfUEVSX1BBR0UsXG4gICAgc2l6ZVBlclBhZ2VSZW5kZXJlciA9IG51bGwsXG4gICAgc2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlciA9IG51bGwsXG4gICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgICBib290c3RyYXA0ID0gZmFsc2UsXG4gICAgYm9vdHN0cmFwNSA9IGZhbHNlLFxuICAgIGRpc2FibGVQYWdlVGl0bGUgPSBmYWxzZSxcbiAgICBwYWdpbmF0aW9uU2l6ZSA9IENvbnN0LlBBR0lOQVRJT05fU0laRSxcbiAgICB3aXRoRmlyc3RBbmRMYXN0ID0gQ29uc3QuV2l0aF9GSVJTVF9BTkRfTEFTVCxcbiAgICBhbHdheXNTaG93QWxsQnRucyA9IENvbnN0LlNIT1dfQUxMX1BBR0VfQlROUyxcbiAgICBmaXJzdFBhZ2VUZXh0ID0gQ29uc3QuRklSU1RfUEFHRV9URVhULFxuICAgIHByZVBhZ2VUZXh0ID0gQ29uc3QuUFJFX1BBR0VfVEVYVCxcbiAgICBuZXh0UGFnZVRleHQgPSBDb25zdC5ORVhUX1BBR0VfVEVYVCxcbiAgICBsYXN0UGFnZVRleHQgPSBDb25zdC5MQVNUX1BBR0VfVEVYVCxcbiAgICBuZXh0UGFnZVRpdGxlID0gQ29uc3QuTkVYVF9QQUdFX1RJVExFLFxuICAgIHByZVBhZ2VUaXRsZSA9IENvbnN0LlBSRV9QQUdFX1RJVExFLFxuICAgIGZpcnN0UGFnZVRpdGxlID0gQ29uc3QuRklSU1RfUEFHRV9USVRMRSxcbiAgICBsYXN0UGFnZVRpdGxlID0gQ29uc3QuTEFTVF9QQUdFX1RJVExFLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICB0b3RhbFBhZ2VzLFxuICAgIGxhc3RQYWdlLFxuICAgIGdldFBhZ2VTdGF0dXMsXG4gICAgaGFuZGxlQ2hhbmdlUGFnZSxcbiAgICBoYW5kbGVDaGFuZ2VTaXplUGVyUGFnZSxcbiAgfSA9IHVzZVBhZ2luYXRpb24oe1xuICAgIGN1cnJQYWdlLFxuICAgIGN1cnJTaXplUGVyUGFnZSxcbiAgICBkYXRhU2l6ZSxcbiAgICBwYWdlU3RhcnRJbmRleCxcbiAgICBwYWdpbmF0aW9uU2l6ZSxcbiAgICB3aXRoRmlyc3RBbmRMYXN0LFxuICAgIGZpcnN0UGFnZVRleHQsXG4gICAgcHJlUGFnZVRleHQsXG4gICAgbmV4dFBhZ2VUZXh0LFxuICAgIGxhc3RQYWdlVGV4dCxcbiAgICBhbHdheXNTaG93QWxsQnRucyxcbiAgICBzaXplUGVyUGFnZUxpc3QsXG4gICAgb25QYWdlQ2hhbmdlLFxuICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UsXG4gICAgbmV4dFBhZ2VUaXRsZSxcbiAgICBwcmVQYWdlVGl0bGUsXG4gICAgZmlyc3RQYWdlVGl0bGUsXG4gICAgbGFzdFBhZ2VUaXRsZSxcbiAgICBkaXNhYmxlUGFnZVRpdGxlLFxuICB9KTtcblxuICBjb25zdCBwYWdlcyA9IGdldFBhZ2VTdGF0dXMoKTtcblxuICBjb25zdCBwYWdlTGlzdENsYXNzID0gY3MoXG4gICAgXCJyZWFjdC1ib290c3RyYXAtdGFibGUtcGFnaW5hdGlvbi1saXN0XCIsXG4gICAgXCJjb2wtbWQtNiBjb2wteHMtNiBjb2wtNiBjb2wtc20tNiBjb2wtbGctNlwiLFxuICAgIHtcbiAgICAgIFwicmVhY3QtYm9vdHN0cmFwLXRhYmxlLXBhZ2luYXRpb24tbGlzdC1oaWRkZW5cIjpcbiAgICAgICAgaGlkZVBhZ2VMaXN0T25seU9uZVBhZ2UgJiYgdG90YWxQYWdlcyA9PT0gMSxcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJvdyByZWFjdC1ib290c3RyYXAtdGFibGUtcGFnaW5hdGlvblwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNiBjb2wteHMtNiBjb2wtNiBjb2wtc20tNiBjb2wtbGctNlwiPlxuICAgICAgICA8U2l6ZVBlclBhZ2VEcm9wZG93bldpdGhBZGFwdGVyXG4gICAgICAgICAgYm9vdHN0cmFwND17Ym9vdHN0cmFwNH1cbiAgICAgICAgICBib290c3RyYXA1PXtib290c3RyYXA1fVxuICAgICAgICAgIHRhYmxlSWQ9e3RhYmxlSWR9XG4gICAgICAgICAgc2l6ZVBlclBhZ2VMaXN0PXtzaXplUGVyUGFnZUxpc3R9XG4gICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtjdXJyU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgaGlkZVNpemVQZXJQYWdlPXtoaWRlU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlcj17c2l6ZVBlclBhZ2VSZW5kZXJlcn1cbiAgICAgICAgICBzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyPXtzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyfVxuICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U9e2hhbmRsZUNoYW5nZVNpemVQZXJQYWdlfVxuICAgICAgICAvPlxuICAgICAgICB7c2hvd1RvdGFsID8gKFxuICAgICAgICAgIDxQYWdpbmF0aW9uVG90YWxXaXRoQWRhcHRlclxuICAgICAgICAgICAgY3VyclBhZ2U9e2N1cnJQYWdlfVxuICAgICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtjdXJyU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICBwYWdlU3RhcnRJbmRleD17cGFnZVN0YXJ0SW5kZXh9XG4gICAgICAgICAgICBkYXRhU2l6ZT17ZGF0YVNpemV9XG4gICAgICAgICAgICBwYWdpbmF0aW9uVG90YWxSZW5kZXJlcj17cGFnaW5hdGlvblRvdGFsUmVuZGVyZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtwYWdlTGlzdFJlbmRlcmVyID8gKFxuICAgICAgICBwYWdlTGlzdFJlbmRlcmVyKHtcbiAgICAgICAgICBwYWdlcyxcbiAgICAgICAgICBvblBhZ2VDaGFuZ2U6IGhhbmRsZUNoYW5nZVBhZ2UsXG4gICAgICAgIH0pXG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cGFnZUxpc3RDbGFzc30+XG4gICAgICAgICAgPFBhZ2luYXRpb25MaXN0V2l0aEFkYXB0ZXJcbiAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgY3VyclBhZ2U9e2N1cnJQYWdlfVxuICAgICAgICAgICAgY3VyclNpemVQZXJQYWdlPXtjdXJyU2l6ZVBlclBhZ2V9XG4gICAgICAgICAgICBkYXRhU2l6ZT17ZGF0YVNpemV9XG4gICAgICAgICAgICBwYWdlU3RhcnRJbmRleD17cGFnZVN0YXJ0SW5kZXh9XG4gICAgICAgICAgICBsYXN0UGFnZT17bGFzdFBhZ2V9XG4gICAgICAgICAgICB0b3RhbFBhZ2VzPXt0b3RhbFBhZ2VzfVxuICAgICAgICAgICAgcGFnZUJ1dHRvblJlbmRlcmVyPXtwYWdlQnV0dG9uUmVuZGVyZXJ9XG4gICAgICAgICAgICBvblBhZ2VDaGFuZ2U9e2hhbmRsZUNoYW5nZVBhZ2V9XG4gICAgICAgICAgICBwYWdpbmF0aW9uU2l6ZT17cGFnaW5hdGlvblNpemV9XG4gICAgICAgICAgICB3aXRoRmlyc3RBbmRMYXN0PXt3aXRoRmlyc3RBbmRMYXN0fVxuICAgICAgICAgICAgZmlyc3RQYWdlVGV4dD17Zmlyc3RQYWdlVGV4dH1cbiAgICAgICAgICAgIHByZVBhZ2VUZXh0PXtwcmVQYWdlVGV4dH1cbiAgICAgICAgICAgIG5leHRQYWdlVGV4dD17bmV4dFBhZ2VUZXh0fVxuICAgICAgICAgICAgbGFzdFBhZ2VUZXh0PXtsYXN0UGFnZVRleHR9XG4gICAgICAgICAgICBhbHdheXNTaG93QWxsQnRucz17YWx3YXlzU2hvd0FsbEJ0bnN9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFnaW5hdGlvbjtcbiIsIi8qIGVzbGludCByZWFjdC9wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VQYWdpbmF0aW9uIH0gZnJvbSBcIi4vaG9va3MvdXNlUGFnaW5hdGlvblwiO1xuaW1wb3J0IFNpemVQZXJQYWdlRHJvcERvd24gZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1kcm9wZG93blwiO1xuXG5jb25zdCBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlciA9IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+IHtcbiAgcmV0dXJuIChwcm9wczogYW55KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgdGFibGVJZCxcbiAgICAgIGJvb3RzdHJhcDQsXG4gICAgICBib290c3RyYXA1LFxuICAgICAgc2l6ZVBlclBhZ2VMaXN0LFxuICAgICAgY3VyclNpemVQZXJQYWdlLFxuICAgICAgaGlkZVNpemVQZXJQYWdlLFxuICAgICAgc2l6ZVBlclBhZ2VSZW5kZXJlcixcbiAgICAgIHNpemVQZXJQYWdlT3B0aW9uUmVuZGVyZXIsXG4gICAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICAgICAgLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIHVzZVBhZ2luYXRpb25cbiAgICAgIGN1cnJQYWdlID0gMSxcbiAgICAgIGRhdGFTaXplID0gMCxcbiAgICAgIHBhZ2VTdGFydEluZGV4ID0gMSxcbiAgICAgIHBhZ2luYXRpb25TaXplID0gNSxcbiAgICAgIHdpdGhGaXJzdEFuZExhc3QgPSB0cnVlLFxuICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMgPSBmYWxzZSxcbiAgICAgIGZpcnN0UGFnZVRleHQgPSBcIjw8XCIsXG4gICAgICBwcmVQYWdlVGV4dCA9IFwiPFwiLFxuICAgICAgbmV4dFBhZ2VUZXh0ID0gXCI+XCIsXG4gICAgICBsYXN0UGFnZVRleHQgPSBcIj4+XCIsXG4gICAgICBvblBhZ2VDaGFuZ2UgPSAoKSA9PiB7fSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBbZHJvcGRvd25PcGVuLCBzZXREcm9wZG93bk9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgY29uc3QgeyBnZXRTaXplUGVyUGFnZVN0YXR1cywgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2UgfSA9IHVzZVBhZ2luYXRpb24oe1xuICAgICAgY3VyclBhZ2UsXG4gICAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgICBkYXRhU2l6ZSxcbiAgICAgIHBhZ2VTdGFydEluZGV4LFxuICAgICAgcGFnaW5hdGlvblNpemUsXG4gICAgICB3aXRoRmlyc3RBbmRMYXN0LFxuICAgICAgYWx3YXlzU2hvd0FsbEJ0bnMsXG4gICAgICBmaXJzdFBhZ2VUZXh0LFxuICAgICAgcHJlUGFnZVRleHQsXG4gICAgICBuZXh0UGFnZVRleHQsXG4gICAgICBsYXN0UGFnZVRleHQsXG4gICAgICBzaXplUGVyUGFnZUxpc3QsXG4gICAgICBvblBhZ2VDaGFuZ2UsXG4gICAgICBvblNpemVQZXJQYWdlQ2hhbmdlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9nZ2xlRHJvcERvd24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBzZXREcm9wZG93bk9wZW4oKHByZXYpID0+ICFwcmV2KTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBjbG9zZURyb3BEb3duID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgc2V0RHJvcGRvd25PcGVuKGZhbHNlKTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBoYW5kbGVTaXplUGVyUGFnZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKHNpemVQZXJQYWdlOiBhbnkpID0+IHtcbiAgICAgICAgaGFuZGxlQ2hhbmdlU2l6ZVBlclBhZ2Uoc2l6ZVBlclBhZ2UpO1xuICAgICAgICBjbG9zZURyb3BEb3duKCk7XG4gICAgICB9LFxuICAgICAgW2hhbmRsZUNoYW5nZVNpemVQZXJQYWdlLCBjbG9zZURyb3BEb3duXVxuICAgICk7XG5cbiAgICBpZiAoc2l6ZVBlclBhZ2VMaXN0Lmxlbmd0aCA+IDEgJiYgIWhpZGVTaXplUGVyUGFnZSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGdldFNpemVQZXJQYWdlU3RhdHVzKCk7XG4gICAgICBpZiAoc2l6ZVBlclBhZ2VSZW5kZXJlcikge1xuICAgICAgICByZXR1cm4gc2l6ZVBlclBhZ2VSZW5kZXJlcih7XG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBjdXJyU2l6ZVBlclBhZ2U6IGAke2N1cnJTaXplUGVyUGFnZX1gLFxuICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U6IGhhbmRsZVNpemVQZXJQYWdlQ2hhbmdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxXcmFwcGVkQ29tcG9uZW50XG4gICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgIGN1cnJTaXplUGVyUGFnZT17YCR7Y3VyclNpemVQZXJQYWdlfWB9XG4gICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICBvcHRpb25SZW5kZXJlcj17c2l6ZVBlclBhZ2VPcHRpb25SZW5kZXJlcn1cbiAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlPXtoYW5kbGVTaXplUGVyUGFnZUNoYW5nZX1cbiAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVEcm9wRG93bn1cbiAgICAgICAgICBvbkJsdXI9e2Nsb3NlRHJvcERvd259XG4gICAgICAgICAgb3Blbj17ZHJvcGRvd25PcGVufVxuICAgICAgICAgIHRhYmxlSWQ9e3RhYmxlSWR9XG4gICAgICAgICAgYm9vdHN0cmFwND17Ym9vdHN0cmFwNH1cbiAgICAgICAgICBib290c3RyYXA1PXtib290c3RyYXA1fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgU2l6ZVBlclBhZ2VEcm9wZG93bldpdGhBZGFwdGVyID1cbiAgc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIoU2l6ZVBlclBhZ2VEcm9wRG93bik7XG5leHBvcnQgZGVmYXVsdCBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBwYWdpbmF0aW9uSGFuZGxlciBmcm9tIFwiLi9wYWdpbmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCBTaXplUGVyUGFnZURyb3Bkb3duIGZyb20gXCIuL3NpemUtcGVyLXBhZ2UtZHJvcGRvd25cIjtcbmltcG9ydCBzaXplUGVyUGFnZURyb3Bkb3duQWRhcHRlciBmcm9tIFwiLi9zaXplLXBlci1wYWdlLWRyb3Bkb3duLWFkYXB0ZXJcIjtcbmltcG9ydCBzdGFuZGFsb25lQWRhcHRlciBmcm9tIFwiLi9zdGFuZGFsb25lLWFkYXB0ZXJcIjtcblxuY29uc3QgU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUgPSAocHJvcHM6IGFueSkgPT4gKFxuICA8U2l6ZVBlclBhZ2VEcm9wZG93biB7Li4ucHJvcHN9IC8+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBzdGFuZGFsb25lQWRhcHRlcihcbiAgcGFnaW5hdGlvbkhhbmRsZXIoc2l6ZVBlclBhZ2VEcm9wZG93bkFkYXB0ZXIoU2l6ZVBlclBhZ2VEcm9wZG93blN0YW5kYWxvbmUpKVxuKTtcbiIsImltcG9ydCBjcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgU2l6ZVBlclBhZ2VPcHRpb24gZnJvbSBcIi4vc2l6ZS1wZXItcGFnZS1vcHRpb25cIjtcblxuY29uc3Qgc2l6ZVBlclBhZ2VEZWZhdWx0Q2xhc3MgPSBcInJlYWN0LWJzLXRhYmxlLXNpemVQZXJQYWdlLWRyb3Bkb3duXCI7XG5cbmNvbnN0IHNpemVQZXJQYWdlRHJvcERvd25EZWZhdWx0UHJvcHMgPSB7XG4gIG9wZW46IGZhbHNlLFxuICBoaWRkZW46IGZhbHNlLFxuICBidG5Db250ZXh0dWFsOiBcImJ0bi1kZWZhdWx0IGJ0bi1zZWNvbmRhcnlcIixcbiAgdmFyaWF0aW9uOiBcImRyb3Bkb3duXCIsXG4gIGNsYXNzTmFtZTogXCJcIixcbiAgb3B0aW9uUmVuZGVyZXI6IG51bGwsXG4gIGJvb3RzdHJhcDQ6IGZhbHNlLFxuICBib290c3RyYXA1OiBmYWxzZSxcbiAgdGFibGVJZDogbnVsbCxcbn07XG5cbmludGVyZmFjZSBTaXplUGVyUGFnZURyb3BEb3duUHJvcHMge1xuICBjdXJyU2l6ZVBlclBhZ2U6IHN0cmluZyB8IG51bWJlcjtcbiAgb3B0aW9uczogQXJyYXk8e1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBwYWdlOiBudW1iZXI7XG4gIH0+O1xuICBvbkNsaWNrOiAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgb25CbHVyOiAoZTogUmVhY3QuRm9jdXNFdmVudCkgPT4gdm9pZDtcbiAgb25TaXplUGVyUGFnZUNoYW5nZTogKHNpemVQZXJQYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIGJvb3RzdHJhcDQ/OiBib29sZWFuO1xuICBib290c3RyYXA1PzogYm9vbGVhbjtcbiAgdGFibGVJZD86IHN0cmluZztcbiAgb3Blbj86IGJvb2xlYW47XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIGJ0bkNvbnRleHR1YWw/OiBzdHJpbmc7XG4gIHZhcmlhdGlvbj86IFwiZHJvcGRvd25cIiB8IFwiZHJvcHVwXCI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb3B0aW9uUmVuZGVyZXI/OiAocHJvcHM6IGFueSkgPT4gUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbDtcbn1cblxuY29uc3QgU2l6ZVBlclBhZ2VEcm9wRG93biA9IChwcm9wczogU2l6ZVBlclBhZ2VEcm9wRG93blByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvcGVuLFxuICAgIHRhYmxlSWQsXG4gICAgaGlkZGVuLFxuICAgIG9uQ2xpY2ssXG4gICAgb25CbHVyLFxuICAgIG9wdGlvbnMsXG4gICAgY2xhc3NOYW1lLFxuICAgIHZhcmlhdGlvbixcbiAgICBib290c3RyYXA0LFxuICAgIGJvb3RzdHJhcDUsXG4gICAgYnRuQ29udGV4dHVhbCxcbiAgICBvcHRpb25SZW5kZXJlcixcbiAgICBjdXJyU2l6ZVBlclBhZ2UsXG4gICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgfSA9IHsgLi4uc2l6ZVBlclBhZ2VEcm9wRG93bkRlZmF1bHRQcm9wcywgLi4ucHJvcHMgfTtcblxuICBjb25zdCBvcGVuQ2xhc3MgPSBvcGVuID8gXCJvcGVuIHNob3dcIiA6IFwiXCI7XG4gIGNvbnN0IGRyb3Bkb3duQ2xhc3NlcyA9IGNzKFxuICAgIG9wZW5DbGFzcyxcbiAgICBzaXplUGVyUGFnZURlZmF1bHRDbGFzcyxcbiAgICB2YXJpYXRpb24sXG4gICAgY2xhc3NOYW1lXG4gICk7XG5cbiAgY29uc3QgZ2VuZXJhdGVkSWQgPSBSZWFjdC51c2VJZCgpO1xuICBjb25zdCBpZCA9IHRhYmxlSWQgPyBgJHt0YWJsZUlkfS1wYWdlRHJvcERvd25gIDogYHBhZ2VEcm9wRG93bi0ke2dlbmVyYXRlZElkfWA7XG5cbiAgcmV0dXJuIChcbiAgICA8c3BhblxuICAgICAgc3R5bGU9e3sgdmlzaWJpbGl0eTogaGlkZGVuID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiIH19XG4gICAgICBjbGFzc05hbWU9e2Ryb3Bkb3duQ2xhc3Nlc31cbiAgICAgIGRhdGEtdGVzdGlkPVwic2l6ZS1wZXItcGFnZS1kcm9wZG93blwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBpZD17aWR9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e2BidG4gJHtidG5Db250ZXh0dWFsfSBkcm9wZG93bi10b2dnbGVgfVxuICAgICAgICBkYXRhLXRvZ2dsZT17Ym9vdHN0cmFwNSA/IHVuZGVmaW5lZCA6IFwiZHJvcGRvd25cIn1cbiAgICAgICAgZGF0YS1icy10b2dnbGU9e2Jvb3RzdHJhcDUgPyBcImRyb3Bkb3duXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e29wZW59XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgPlxuICAgICAgICB7Y3VyclNpemVQZXJQYWdlfXtcIiBcIn1cbiAgICAgICAge2Jvb3RzdHJhcDQgfHwgYm9vdHN0cmFwNSA/IG51bGwgOiAoXG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC9idXR0b24+XG4gICAgICA8dWxcbiAgICAgICAgY2xhc3NOYW1lPXtgZHJvcGRvd24tbWVudSAke29wZW5DbGFzc31gfVxuICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT17aWR9XG4gICAgICA+XG4gICAgICAgIHtvcHRpb25zLm1hcCgob3B0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9uUmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25SZW5kZXJlcih7XG4gICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNpemVQZXJQYWdlT3B0aW9uXG4gICAgICAgICAgICAgIHsuLi5vcHRpb259XG4gICAgICAgICAgICAgIGtleT17b3B0aW9uLnRleHR9XG4gICAgICAgICAgICAgIGJvb3RzdHJhcDQ9e2Jvb3RzdHJhcDR9XG4gICAgICAgICAgICAgIGJvb3RzdHJhcDU9e2Jvb3RzdHJhcDV9XG4gICAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2U9e29uU2l6ZVBlclBhZ2VDaGFuZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC91bD5cbiAgICA8L3NwYW4+XG4gICk7XG59O1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgU2l6ZVBlclBhZ2VEcm9wRG93bjtcbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgU2l6ZVBlclBhZ2VPcHRpb25Qcm9wcyB7XG4gIHRleHQ6IHN0cmluZztcbiAgcGFnZTogbnVtYmVyO1xuICBvblNpemVQZXJQYWdlQ2hhbmdlOiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBib290c3RyYXA0PzogYm9vbGVhbjtcbiAgYm9vdHN0cmFwNT86IGJvb2xlYW47XG59XG5cbmNvbnN0IFNpemVQZXJQYWdlT3B0aW9uID0gKHtcbiAgdGV4dCxcbiAgcGFnZSxcbiAgb25TaXplUGVyUGFnZUNoYW5nZSxcbiAgYm9vdHN0cmFwNCA9IGZhbHNlLFxuICBib290c3RyYXA1ID0gZmFsc2UsXG59OiBTaXplUGVyUGFnZU9wdGlvblByb3BzKSA9PlxuICBib290c3RyYXA0IHx8IGJvb3RzdHJhcDUgPyAoXG4gICAgPGFcbiAgICAgIGhyZWY9XCIjXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICBjbGFzc05hbWU9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgIGRhdGEtcGFnZT17cGFnZX1cbiAgICAgIG9uTW91c2VEb3duPXsoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG9uU2l6ZVBlclBhZ2VDaGFuZ2UocGFnZSk7XG4gICAgICB9fVxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfX1cbiAgICA+XG4gICAgICB7dGV4dH1cbiAgICA8L2E+XG4gICkgOiAoXG4gICAgPGxpIGtleT17dGV4dH0gcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT1cImRyb3Bkb3duLWl0ZW1cIj5cbiAgICAgIDxhXG4gICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICBkYXRhLXBhZ2U9e3BhZ2V9XG4gICAgICAgIG9uTW91c2VEb3duPXsoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBvblNpemVQZXJQYWdlQ2hhbmdlKHBhZ2UpO1xuICAgICAgICB9fVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RleHR9XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgKTtcblxuXG5leHBvcnQgZGVmYXVsdCBTaXplUGVyUGFnZU9wdGlvbjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdGF0ZUNvbnRleHQgfSBmcm9tIFwiLi9zdGF0ZS1jb250ZXh0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IChXcmFwcGVkQ29tcG9uZW50OiBhbnkpID0+IHtcbiAgY29uc3QgU3RhbmRhbG9uZUFkYXB0ZXIgPSAocHJvcHM6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KFN0YXRlQ29udGV4dCk7XG4gICAgY29uc3QgcGFnaW5hdGlvblByb3BzID0gY29udGV4dCA/IGNvbnRleHQucGFnaW5hdGlvblByb3BzIDoge307XG5cbiAgICBjb25zdCB7IHBhZ2UsIHNpemVQZXJQYWdlLCAuLi5yZXN0IH0gPSBwcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8V3JhcHBlZENvbXBvbmVudFxuICAgICAgICB7Li4ucGFnaW5hdGlvblByb3BzfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgY3VyclBhZ2U9e3BhZ2UgPz8gcGFnaW5hdGlvblByb3BzLnBhZ2V9XG4gICAgICAgIGN1cnJTaXplUGVyUGFnZT17c2l6ZVBlclBhZ2UgPz8gcGFnaW5hdGlvblByb3BzLnNpemVQZXJQYWdlfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuICByZXR1cm4gU3RhbmRhbG9uZUFkYXB0ZXI7XG59O1xuIiwiLyogZXNsaW50IHJlYWN0L3Byb3AtdHlwZXM6IDAgKi9cbi8qIGVzbGludCByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHM6IDAgKi9cbi8qIGVzbGludCBuby1sb25lbHktaWY6IDAgKi9cbi8qIGVzbGludCBjYW1lbGNhc2U6IDAgKi9cbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IENvbnN0IGZyb20gXCIuL2NvbnN0XCI7XG5cbmltcG9ydCB7IFBhZ2luYXRpb25Qcm92aWRlclByb3BzIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBhbGlnblBhZ2UgfSBmcm9tIFwiLi9wYWdlXCI7XG5cbmltcG9ydCB7IHVzZVBhZ2luYXRpb25TdGF0ZSB9IGZyb20gXCIuL2hvb2tzL3VzZVBhZ2luYXRpb25TdGF0ZVwiO1xuXG5jb25zdCBTdGF0ZUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PGFueT4obnVsbCk7XG5leHBvcnQgeyBTdGF0ZUNvbnRleHQgfTtcblxuY29uc3QgU3RhdGVQcm92aWRlcjogUmVhY3QuRkM8UGFnaW5hdGlvblByb3ZpZGVyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgcGFnaW5hdGlvbiwgY2hpbGRyZW4gfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgZGF0YUNoYW5nZUxpc3RlbmVyLFxuICAgIHJlbW90ZUVtaXR0ZXJSZWYsXG4gICAgZ2V0UGFnaW5hdGlvblByb3BzLFxuICB9ID0gdXNlUGFnaW5hdGlvblN0YXRlKHByb3BzKTtcblxuICBjb25zdCBwYWdpbmF0aW9uUHJvcHMgPSBnZXRQYWdpbmF0aW9uUHJvcHMoKTtcbiAgY29uc3QgcGFnaW5hdGlvblZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIC4uLnBhZ2luYXRpb24sXG4gICAgb3B0aW9uczogcGFnaW5hdGlvblByb3BzLFxuICB9KSwgW3BhZ2luYXRpb24sIHBhZ2luYXRpb25Qcm9wc10pO1xuXG4gIHJldHVybiAoXG4gICAgPFN0YXRlQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgcGFnaW5hdGlvblByb3BzLFxuICAgICAgICBwYWdpbmF0aW9uVGFibGVQcm9wczoge1xuICAgICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb25WYWx1ZSxcbiAgICAgICAgICBzZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlcjogKGVtaXR0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVtb3RlRW1pdHRlclJlZi5jdXJyZW50ID0gZW1pdHRlcjtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRhdGFDaGFuZ2VMaXN0ZW5lcixcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU3RhdGVDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gKHtcbiAgUHJvdmlkZXI6IFN0YXRlUHJvdmlkZXIsXG4gIENvbnN1bWVyOiBTdGF0ZUNvbnRleHQuQ29uc3VtZXIsXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX187IiwiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmIChhcmcpIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIHBhcnNlVmFsdWUoYXJnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZVZhbHVlIChhcmcpIHtcblx0XHRpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHR9XG5cblx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0Y2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRDbGFzcyAodmFsdWUsIG5ld0NsYXNzKSB7XG5cdFx0aWYgKCFuZXdDbGFzcykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyAnICcgKyBuZXdDbGFzcztcblx0XHR9XG5cdFxuXHRcdHJldHVybiB2YWx1ZSArIG5ld0NsYXNzO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5ODcpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJSZWZsZWN0T3duS2V5cyIsIlIiLCJSZWZsZWN0IiwiUmVmbGVjdEFwcGx5IiwiYXBwbHkiLCJ0YXJnZXQiLCJyZWNlaXZlciIsImFyZ3MiLCJGdW5jdGlvbiIsInByb3RvdHlwZSIsImNhbGwiLCJvd25LZXlzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImNvbmNhdCIsIk51bWJlcklzTmFOIiwiTnVtYmVyIiwiaXNOYU4iLCJ2YWx1ZSIsIkV2ZW50RW1pdHRlciIsImluaXQiLCJ0aGlzIiwib25jZSIsImVtaXR0ZXIiLCJuYW1lIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJlcnJvckxpc3RlbmVyIiwiZXJyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZXNvbHZlciIsInNsaWNlIiwiYXJndW1lbnRzIiwiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwiaGFuZGxlciIsImZsYWdzIiwib24iLCJhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlciIsIl9ldmVudHMiLCJ1bmRlZmluZWQiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImNoZWNrTGlzdGVuZXIiLCJsaXN0ZW5lciIsIlR5cGVFcnJvciIsIl9nZXRNYXhMaXN0ZW5lcnMiLCJ0aGF0IiwiX2FkZExpc3RlbmVyIiwidHlwZSIsInByZXBlbmQiLCJtIiwiZXZlbnRzIiwiZXhpc3RpbmciLCJ3YXJuaW5nIiwiY3JlYXRlIiwibmV3TGlzdGVuZXIiLCJlbWl0IiwidW5zaGlmdCIsInB1c2giLCJsZW5ndGgiLCJ3YXJuZWQiLCJ3IiwiRXJyb3IiLCJTdHJpbmciLCJjb3VudCIsImNvbnNvbGUiLCJ3YXJuIiwib25jZVdyYXBwZXIiLCJmaXJlZCIsIndyYXBGbiIsIl9vbmNlV3JhcCIsInN0YXRlIiwid3JhcHBlZCIsImJpbmQiLCJfbGlzdGVuZXJzIiwidW53cmFwIiwiZXZsaXN0ZW5lciIsImFyciIsInJldCIsIkFycmF5IiwiaSIsInVud3JhcExpc3RlbmVycyIsImFycmF5Q2xvbmUiLCJsaXN0ZW5lckNvdW50IiwibiIsImNvcHkiLCJhZGRFdmVudExpc3RlbmVyIiwid3JhcExpc3RlbmVyIiwiYXJnIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInNldCIsIlJhbmdlRXJyb3IiLCJnZXRQcm90b3R5cGVPZiIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImRvRXJyb3IiLCJlcnJvciIsImVyIiwibWVzc2FnZSIsImNvbnRleHQiLCJsZW4iLCJsaXN0ZW5lcnMiLCJhZGRMaXN0ZW5lciIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0IiwicG9zaXRpb24iLCJvcmlnaW5hbExpc3RlbmVyIiwic2hpZnQiLCJpbmRleCIsInBvcCIsInNwbGljZU9uZSIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsImtleSIsImtleXMiLCJyYXdMaXN0ZW5lcnMiLCJldmVudE5hbWVzIiwiUGFnaW5hdGlvbkxpc3RTdGFuZGFsb25lIiwiUGFnaW5hdGlvblRvdGFsU3RhbmRhbG9uZSIsIlNpemVQZXJQYWdlRHJvcGRvd25TdGFuZGFsb25lIiwib3B0aW9ucyIsImNyZWF0ZUNvbnRleHQiLCJQcm92aWRlciIsIlBhZ2luYXRpb25Qcm92aWRlciIsInByb3BzIiwiU3RhdGVDb250ZXh0IiwiQ29uc3VtZXIiLCJjaGlsZHJlbiIsIlBBR0lOQVRJT05fU0laRSIsIlBBR0VfU1RBUlRfSU5ERVgiLCJXaXRoX0ZJUlNUX0FORF9MQVNUIiwiU0hPV19BTExfUEFHRV9CVE5TIiwiU0hPV19UT1RBTCIsIlBBR0lOQVRJT05fVE9UQUwiLCJGSVJTVF9QQUdFX1RFWFQiLCJQUkVfUEFHRV9URVhUIiwiTkVYVF9QQUdFX1RFWFQiLCJMQVNUX1BBR0VfVEVYVCIsIk5FWFRfUEFHRV9USVRMRSIsIkxBU1RfUEFHRV9USVRMRSIsIlBSRV9QQUdFX1RJVExFIiwiRklSU1RfUEFHRV9USVRMRSIsIlNJWkVfUEVSX1BBR0VfTElTVCIsIkhJREVfU0laRV9QRVJfUEFHRSIsIkhJREVfUEFHRV9MSVNUX09OTFlfT05FX1BBR0UiLCJQYWdpbmF0aW9uRGF0YUNvbnRleHQiLCJQYWdpbmF0aW9uRGF0YVByb3ZpZGVyIiwiZm9yd2FyZFJlZiIsInJlZiIsImRhdGEiLCJwcm9wRGF0YSIsInBhZ2luYXRpb24iLCJvbkRhdGFTaXplQ2hhbmdlIiwiY3VyclBhZ2UiLCJzZXRDdXJyUGFnZSIsImN1cnJTaXplUGVyUGFnZSIsImdldFBhZ2luYXRpb25Qcm9wcyIsImlzUmVtb3RlUGFnaW5hdGlvbiIsInJlbW90ZUVtaXR0ZXJSZWYiLCJ1c2VQYWdpbmF0aW9uU3RhdGUiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwicHJldkRhdGFMZW5ndGhSZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJjdXN0b20iLCJvblBhZ2VDaGFuZ2UiLCJwYWdlU3RhcnRJbmRleCIsIm5ld1BhZ2UiLCJhbGlnblBhZ2UiLCJjdXJyZW50IiwiZGF0YVNpemUiLCJlZmZlY3RpdmVDdXJyU2l6ZVBlclBhZ2UiLCJzaXplUGVyUGFnZSIsImVmZmVjdGl2ZUN1cnJQYWdlIiwicGFnZSIsInRvdGFsUGFnZXMiLCJNYXRoIiwiZmxvb3IiLCJzbGljZWREYXRhIiwiZ2V0QnlDdXJyUGFnZSIsInNldFJlbW90ZUVtaXR0ZXIiLCJwYWdpbmF0aW9uUGFnZSIsInBhZ2luYXRpb25TaXplUGVyUGFnZSIsInJlc3QiLCJyZW5kZXJEZWZhdWx0UGFnaW5hdGlvbiIsInVzZVBhZ2luYXRpb24iLCJwYWdpbmF0aW9uU2l6ZSIsIndpdGhGaXJzdEFuZExhc3QiLCJmaXJzdFBhZ2VUZXh0IiwicHJlUGFnZVRleHQiLCJuZXh0UGFnZVRleHQiLCJsYXN0UGFnZVRleHQiLCJhbHdheXNTaG93QWxsQnRucyIsInNpemVQZXJQYWdlTGlzdCIsIm9uU2l6ZVBlclBhZ2VDaGFuZ2UiLCJuZXh0UGFnZVRpdGxlIiwicHJlUGFnZVRpdGxlIiwiZmlyc3RQYWdlVGl0bGUiLCJsYXN0UGFnZVRpdGxlIiwiZGlzYWJsZVBhZ2VUaXRsZSIsInVzZU1lbW8iLCJjZWlsIiwibGFzdFBhZ2UiLCJiYWNrVG9QcmV2UGFnZSIsInVzZUNhbGxiYWNrIiwiY2FsY3VsYXRlUGFnZXMiLCJwYWdlcyIsImVuZFBhZ2UiLCJzdGFydFBhZ2UiLCJtYXgiLCJnZXRQYWdlU3RhdHVzIiwiaXNTdGFydCIsInBhZ2VJdGVtIiwiaXNFbmQiLCJmaWx0ZXIiLCJtYXAiLCJ0aXRsZSIsImFjdGl2ZSIsImRpc2FibGVkIiwicGFnZVJlc3VsdCIsImhhbmRsZUNoYW5nZVBhZ2UiLCJwYXJzZUludCIsImhhbmRsZUNoYW5nZVNpemVQZXJQYWdlIiwic2VsZWN0ZWRTaXplIiwibmV3Q3VyclBhZ2UiLCJuZXdUb3RhbFBhZ2VzIiwibmV3TGFzdFBhZ2UiLCJnZXRTaXplUGVyUGFnZVN0YXR1cyIsIl9zaXplUGVyUGFnZSIsInRleHQiLCJmcm9tVG8iLCJvZmZzZXQiLCJhYnMiLCJmcm9tIiwidG8iLCJtaW4iLCJib290c3RyYXA0IiwidGFibGVJZCIsInJlbW90ZUVtaXR0ZXIiLCJwcm9wUmVtb3RlRW1pdHRlciIsInVzZVN0YXRlIiwic2V0Q3VyclNpemVQZXJQYWdlIiwic2V0RGF0YVNpemUiLCJ0b3RhbFNpemUiLCJkYXRhQ2hhbmdlTGlzdGVuZXJSZWYiLCJpc1JlbW90ZVBhZ2luYXRpb25Qcm9wUmVmIiwicHJvcFJlbW90ZUVtaXR0ZXJSZWYiLCJ1c2VMYXlvdXRFZmZlY3QiLCJlIiwicmVzdWx0IiwiaGFuZGxlRGF0YVNpemVDaGFuZ2UiLCJuZXdEYXRhU2l6ZSIsInByZXZQYWdlIiwiZWZmZWN0aXZlRGF0YVNpemUiLCJoaWRlU2l6ZVBlclBhZ2UiLCJoaWRlUGFnZUxpc3RPbmx5T25lUGFnZSIsInNob3dUb3RhbCIsInBhZ2VMaXN0UmVuZGVyZXIiLCJwYWdlQnV0dG9uUmVuZGVyZXIiLCJzaXplUGVyUGFnZVJlbmRlcmVyIiwicGFnaW5hdGlvblRvdGFsUmVuZGVyZXIiLCJzaXplUGVyUGFnZU9wdGlvblJlbmRlcmVyIiwiZGF0YUNoYW5nZUxpc3RlbmVyIiwiUGFnZUJ1dHRvbiIsIm1lbW8iLCJjbGFzc05hbWUiLCJjbGFzc2VzIiwiaHJlZiIsIm9uQ2xpY2siLCJwcmV2ZW50RGVmYXVsdCIsImVuZEluZGV4IiwiZ2V0Tm9ybWFsaXplZFBhZ2UiLCJwcmV2RGF0YVNpemUiLCJlbmQiLCJzdGFydCIsInN0YXJ0SW5kZXgiLCJXcmFwcGVkQ29tcG9uZW50IiwicGFnaW5hdGlvbkxpc3RBZGFwdGVyIiwiUGFnaW5hdGlvbkxpc3RXaXRoQWRhcHRlciIsInBhZ2VQcm9wcyIsImVsZW1lbnQiLCJjbG9uZUVsZW1lbnQiLCJwYWdpbmF0aW9uVG90YWxBZGFwdGVyIiwiUGFnaW5hdGlvblRvdGFsV2l0aEFkYXB0ZXIiLCJib290c3RyYXA1IiwicGFnZUxpc3RDbGFzcyIsIlNpemVQZXJQYWdlRHJvcGRvd25XaXRoQWRhcHRlciIsInNpemVQZXJQYWdlRHJvcGRvd25BZGFwdGVyIiwiZHJvcGRvd25PcGVuIiwic2V0RHJvcGRvd25PcGVuIiwidG9nZ2xlRHJvcERvd24iLCJwcmV2IiwiY2xvc2VEcm9wRG93biIsImhhbmRsZVNpemVQZXJQYWdlQ2hhbmdlIiwib3B0aW9uUmVuZGVyZXIiLCJvbkJsdXIiLCJvcGVuIiwic2l6ZVBlclBhZ2VEcm9wRG93bkRlZmF1bHRQcm9wcyIsImhpZGRlbiIsImJ0bkNvbnRleHR1YWwiLCJ2YXJpYXRpb24iLCJvcGVuQ2xhc3MiLCJkcm9wZG93bkNsYXNzZXMiLCJnZW5lcmF0ZWRJZCIsInVzZUlkIiwiaWQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJyb2xlIiwib3B0aW9uIiwidGFiSW5kZXgiLCJvbk1vdXNlRG93biIsInVzZUNvbnRleHQiLCJwYWdpbmF0aW9uUHJvcHMiLCJTdGF0ZVByb3ZpZGVyIiwicGFnaW5hdGlvblZhbHVlIiwicGFnaW5hdGlvblRhYmxlUHJvcHMiLCJzZXRQYWdpbmF0aW9uUmVtb3RlRW1pdHRlciIsImhhc093biIsImhhc093blByb3BlcnR5IiwiY2xhc3NOYW1lcyIsImFwcGVuZENsYXNzIiwicGFyc2VWYWx1ZSIsImlzQXJyYXkiLCJ0b1N0cmluZyIsImluY2x1ZGVzIiwibmV3Q2xhc3MiLCJkZWZhdWx0IiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyJdLCJzb3VyY2VSb290IjoiIn0=
|