| 1
2 | 6x
| module.exports=function(e){function t(o){Iif(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=5)}([function(e,t){e.exports=require("boundless-arrow-key-navigation")},function(e,t){e.exports=require("boundless-button")},function(e,t){e.exports=require("boundless-utils-omit-keys")},function(e,t){e.exports=require("classnames")},function(e,t){e.exports=require("react")},function(e,t,n){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){Iif("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){for(var n=void 0,o=0,r=e.length;o<r;o+=1)if(t(e[o])){n=o;break}return n}Object.defineProperty(t,"__esModule",{value:!0});var p=n(4),c=n.n(p),u=n(3),a=n.n(u),l=n(0),d=n.n(l),f=n(1),y=n.n(f),h=n(2),x=n.n(h),O=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},b=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),v=function(e){function t(){var e,n,s,p;o(this,t);for(var c=arguments.length,u=Array(c),a=0;a<c;a++)u[a]=arguments[a];return n=s=r(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),s.state={selectedIndex:null},s.handleOptionSelection=function(e){var t=Array.prototype.indexOf.call(e.target.parentElement.children,e.target);s.state.selectedIndex!==t&&s.setState({selectedIndex:t},function(){s.props.onOptionSelected(s.props.options[s.state.selectedIndex],s.state.selectedIndex)})},s.getSelectedOption=function(){return s.props.options[s.state.selectedIndex]},s.getSelectedOptionIndex=function(){return s.state.selectedIndex},s.selectOption=function(e){return s.setState({selectedIndex:s.props.options.indexOf(e)})},s.selectOptionByKey=function(e,t){return s.setState({selectedIndex:i(s.props.options,function(n){return n[e]===t})})},s.selectOptionIndex=function(e){return s.setState({selectedIndex:e})},p=n,r(s,p)}return s(t,e),b(t,[{key:"inferSelectedOptionIndex",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return i(e.options,function(e){return e.pressed})||t.selectedIndex}},{key:"componentWillMount",value:function(){this.setState({selectedIndex:this.inferSelectedOptionIndex()||this.props.defaultOptionSelectedIndex})}},{key:"componentWillReceiveProps",value:function(e){e.options!==this.props.options&&this.setState({selectedIndex:this.inferSelectedOptionIndex(e)})}},{key:"getNextOptionIndex",value:function(e){var t=e+1;return t<this.props.options.length?t:0}},{key:"getPreviousOptionIndex",value:function(e){var t=e-1;return t<0?this.props.options.length-1:t}},{key:"render",value:function(){var e=this;return c.a.createElement(d.a,O({},x()(this.props,t.internalKeys),{role:"radiogroup",className:a()("b-segmented-control",this.props.className),mode:d.a.mode.HORIZONTAL}),this.props.options.map(function(t,n){return c.a.createElement(y.a,O({},t,{key:t.key||n,"aria-checked":n===e.state.selectedIndex,component:t.component||e.props.optionComponent,className:a()("b-segmented-control-option",t.className,{"b-segmented-control-option-selected":n===e.state.selectedIndex}),onPressed:e.handleOptionSelection,pressed:n===e.state.selectedIndex,role:"radio"}),t.children)}))}}]),t}(c.a.PureComponent);v.propTypes={"*":p.PropTypes.any,defaultOptionSelectedIndex:p.PropTypes.number,onOptionSelected:p.PropTypes.func,optionComponent:p.PropTypes.oneOfType([p.PropTypes.string,p.PropTypes.func]),options:p.PropTypes.arrayOf(p.PropTypes.shape({"*":p.PropTypes.any,children:p.PropTypes.node})).isRequired},v.defaultProps={defaultOptionSelectedIndex:0,onOptionSelected:function(){},optionComponent:"button",options:[]},v.internalKeys=Object.keys(v.defaultProps),t.default=v}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIDIxODFiOWU4NmJlODIyNmViOTUzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy1hcnJvdy1rZXktbmF2aWdhdGlvblwifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJib3VuZGxlc3MtYnV0dG9uXCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy1vbWl0LWtleXNcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiY2xhc3NuYW1lc1wifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9ib3VuZGxlc3Mtc2VnbWVudGVkLWNvbnRyb2wvaW5kZXguanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVzIiwiaSIsImwiLCJjYWxsIiwibSIsImMiLCJ2YWx1ZSIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIm4iLCJfX2VzTW9kdWxlIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsIl9fd2VicGFja19leHBvcnRzX18iLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIndyaXRhYmxlIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJmaW5kSW5kZXgiLCJhcnIiLCJ0ZXN0IiwiZm91bmQiLCJsZW4iLCJsZW5ndGgiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2NsYXNzbmFtZXNfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc19hcnJvd19rZXlfbmF2aWdhdGlvbl9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc19hcnJvd19rZXlfbmF2aWdhdGlvbl9fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX2J1dHRvbl9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JvdW5kbGVzc19idXR0b25fX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX19fZGVmYXVsdCIsIl9leHRlbmRzIiwiYXNzaWduIiwidGFyZ2V0IiwiYXJndW1lbnRzIiwic291cmNlIiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsInByb3BzIiwiZGVzY3JpcHRvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIlNlZ21lbnRlZENvbnRyb2wiLCJfUmVhY3QkUHVyZUNvbXBvbmVudCIsIl9yZWYiLCJfdGVtcCIsIl90aGlzIiwiX3JldCIsInRoaXMiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImdldFByb3RvdHlwZU9mIiwiYXBwbHkiLCJjb25jYXQiLCJzdGF0ZSIsInNlbGVjdGVkSW5kZXgiLCJoYW5kbGVPcHRpb25TZWxlY3Rpb24iLCJldmVudCIsImluZGV4IiwiaW5kZXhPZiIsInBhcmVudEVsZW1lbnQiLCJjaGlsZHJlbiIsInNldFN0YXRlIiwib25PcHRpb25TZWxlY3RlZCIsIm9wdGlvbnMiLCJnZXRTZWxlY3RlZE9wdGlvbiIsImdldFNlbGVjdGVkT3B0aW9uSW5kZXgiLCJzZWxlY3RPcHRpb24iLCJvcHRpb24iLCJzZWxlY3RPcHRpb25CeUtleSIsImsiLCJ2Iiwic2VsZWN0T3B0aW9uSW5kZXgiLCJ1bmRlZmluZWQiLCJwcmVzc2VkIiwiaW5mZXJTZWxlY3RlZE9wdGlvbkluZGV4IiwiZGVmYXVsdE9wdGlvblNlbGVjdGVkSW5kZXgiLCJuZXh0UHJvcHMiLCJjdXJyZW50T3B0aW9uSW5kZXgiLCJuZXh0IiwicHJldmlvdXMiLCJfdGhpczIiLCJhIiwiY3JlYXRlRWxlbWVudCIsImludGVybmFsS2V5cyIsInJvbGUiLCJjbGFzc05hbWUiLCJtb2RlIiwiSE9SSVpPTlRBTCIsIm1hcCIsImFyaWEtY2hlY2tlZCIsImNvbXBvbmVudCIsIm9wdGlvbkNvbXBvbmVudCIsImItc2VnbWVudGVkLWNvbnRyb2wtb3B0aW9uLXNlbGVjdGVkIiwib25QcmVzc2VkIiwiUHVyZUNvbXBvbmVudCIsInByb3BUeXBlcyIsIioiLCJhbnkiLCJudW1iZXIiLCJmdW5jIiwib25lT2ZUeXBlIiwic3RyaW5nIiwiYXJyYXlPZiIsInNoYXBlIiwibm9kZSIsImlzUmVxdWlyZWQiLCJkZWZhdWx0UHJvcHMiLCJrZXlzIl0sIm1hcHBpbmdzIjoiQUFBQUEsT0FBT0MsUUFDRSxTQUFVQyxHQ0duQixRQUFBQyxHQUFBQyxHQUdBLEdBQUFDLEVBQUFELEdBQ0EsTUFBQUMsR0FBQUQsR0FBQUgsT0FHQSxJQUFBRCxHQUFBSyxFQUFBRCxJQUNBRSxFQUFBRixFQUNBRyxHQUFBLEVBQ0FO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LEtBQUssVUFDSmpELEVBQU15QixpQlBuRTBwS3JCLEdPN0Uzb0tyQixFQUFBK0QsRUFBTWEsY0FBL0J2RCxHQUNWd0QsV0FJSEMsSUFBSy9FLEVBQUEsVUFBVWdGLElBS2Z0QiwyQkFBNEIxRCxFQUFBLFVBQVVpRixPQUt0Q3BDLGlCQUFrQjdDLEVBQUEsVUFBVWtGLEtBSzVCUixnQkFBaUIxRSxFQUFBLFVBQVVtRixXQUN2Qm5GLEVBQUEsVUFBVW9GLE9BQ1ZwRixFQUFBLFVBQVVrRixPQWtCZHBDLFFBQVM5QyxFQUFBLFVBQVVxRixRQUNmckYsRUFBQSxVQUFVc0YsT0FJTlAsSUFBSy9FLEVBQUEsVUFBVWdGLElBQ2ZyQyxTQUFVM0MsRUFBQSxVQUFVdUYsUUFFMUJDLFlBaERXbEUsRUFtRFZtRSxjQUNIL0IsMkJBQTRCLEVBQzVCYixpQkFBa0IsYUFDbEI2QixnQkFBaUIsU0FDakI1QixZQXZEYXhCLEVBMERWNEMsYUFBZXRHLE9BQU84SCxLQUFLcEUsRUFBaUJtRSxjUG1CbW5NL0csRUFBNkIsUU83RWxyTTRDIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDUpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtYXJyb3cta2V5LW5hdmlnYXRpb25cIik7XG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtYnV0dG9uXCIpO1xuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wiKTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNsYXNzbmFtZXNcIik7XG5cbi8qKiovIH0pLFxuLyogNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2NsYXNzbmFtZXNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc19hcnJvd19rZXlfbmF2aWdhdGlvbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYm91bmRsZXNzX2Fycm93X2tleV9uYXZpZ2F0aW9uX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYm91bmRsZXNzX2Fycm93X2tleV9uYXZpZ2F0aW9uX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfYnV0dG9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfYnV0dG9uX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX2J1dHRvbl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfXyk7XG52YXIgX2V4dGVuZHM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odGFyZ2V0KXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgc291cmNlPWFyZ3VtZW50c1tpXTtmb3IodmFyIGtleSBpbiBzb3VyY2Upe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2Usa2V5KSl7dGFyZ2V0W2tleV09c291cmNlW2tleV07fX19cmV0dXJuIHRhcmdldDt9O3ZhciBfY3JlYXRlQ2xhc3M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCxwcm9wcyl7Zm9yKHZhciBpPTA7aTxwcm9wcy5sZW5ndGg7aSsrKXt2YXIgZGVzY3JpcHRvcj1wcm9wc1tpXTtkZXNjcmlwdG9yLmVudW1lcmFibGU9ZGVzY3JpcHRvci5lbnVtZXJhYmxlfHxmYWxzZTtkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZT10cnVlO2lmKFwidmFsdWVcImluIGRlc2NyaXB0b3IpZGVzY3JpcHRvci53cml0YWJsZT10cnVlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsZGVzY3JpcHRvci5rZXksZGVzY3JpcHRvcik7fX1yZXR1cm4gZnVuY3Rpb24oQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQcm9wcyl7aWYocHJvdG9Qcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSxwcm90b1Byb3BzKTtpZihzdGF0aWNQcm9wcylkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLHN0YXRpY1Byb3BzKTtyZXR1cm4gQ29uc3RydWN0b3I7fTt9KCk7ZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO319ZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZixjYWxsKXtpZighc2VsZil7dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO31yZXR1cm4gY2FsbCYmKHR5cGVvZiBjYWxsPT09XCJvYmplY3RcInx8dHlwZW9mIGNhbGw9PT1cImZ1bmN0aW9uXCIpP2NhbGw6c2VsZjt9ZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLHN1cGVyQ2xhc3Mpe2lmKHR5cGVvZiBzdXBlckNsYXNzIT09XCJmdW5jdGlvblwiJiZzdXBlckNsYXNzIT09bnVsbCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIHN1cGVyQ2xhc3MpO31zdWJDbGFzcy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzJiZzdXBlckNsYXNzLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnN1YkNsYXNzLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX19KTtpZihzdXBlckNsYXNzKU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3Msc3VwZXJDbGFzcyk6c3ViQ2xhc3MuX19wcm90b19fPXN1cGVyQ2xhc3M7fWZ1bmN0aW9uIGZpbmRJbmRleChhcnIsdGVzdCl7dmFyIGZvdW5kPXZvaWQgMDtmb3IodmFyIGk9MCxsZW49YXJyLmxlbmd0aDtpPGxlbjtpKz0xKXtpZih0ZXN0KGFycltpXSkpe2ZvdW5kPWk7YnJlYWs7fX1yZXR1cm4gZm91bmQ7fXZhciBTZWdtZW50ZWRDb250cm9sPWZ1bmN0aW9uKF9SZWFjdCRQdXJlQ29tcG9uZW50KXtfaW5oZXJpdHMoU2VnbWVudGVkQ29udHJvbCxfUmVhY3QkUHVyZUNvbXBvbmVudCk7ZnVuY3Rpb24gU2VnbWVudGVkQ29udHJvbCgpe3ZhciBfcmVmO3ZhciBfdGVtcCxfdGhpcyxfcmV0O19jbGFzc0NhbGxDaGVjayh0aGlzLFNlZ21lbnRlZENvbnRyb2wpO2Zvcih2YXIgX2xlbj1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9QXJyYXkoX2xlbiksX2tleT0wO19rZXk8X2xlbjtfa2V5Kyspe2FyZ3NbX2tleV09YXJndW1lbnRzW19rZXldO31yZXR1cm4gX3JldD0oX3RlbXA9KF90aGlzPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKF9yZWY9U2VnbWVudGVkQ29udHJvbC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihTZWdtZW50ZWRDb250cm9sKSkuY2FsbC5hcHBseShfcmVmLFt0aGlzXS5jb25jYXQoYXJncykpKSxfdGhpcyksX3RoaXMuc3RhdGU9e3NlbGVjdGVkSW5kZXg6bnVsbH0sX3RoaXMuaGFuZGxlT3B0aW9uU2VsZWN0aW9uPWZ1bmN0aW9uKGV2ZW50KXt2YXIgaW5kZXg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChldmVudC50YXJnZXQucGFyZW50RWxlbWVudC5jaGlsZHJlbixldmVudC50YXJnZXQpO2lmKF90aGlzLnN0YXRlLnNlbGVjdGVkSW5kZXghPT1pbmRleCl7X3RoaXMuc2V0U3RhdGUoe3NlbGVjdGVkSW5kZXg6aW5kZXh9LGZ1bmN0aW9uKCl7X3RoaXMucHJvcHMub25PcHRpb25TZWxlY3RlZChfdGhpcy5wcm9wcy5vcHRpb25zW190aGlzLnN0YXRlLnNlbGVjdGVkSW5kZXhdLF90aGlzLnN0YXRlLnNlbGVjdGVkSW5kZXgpO30pO319LF90aGlzLmdldFNlbGVjdGVkT3B0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIF90aGlzLnByb3BzLm9wdGlvbnNbX3RoaXMuc3RhdGUuc2VsZWN0ZWRJbmRleF07fSxfdGhpcy5nZXRTZWxlY3RlZE9wdGlvbkluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIF90aGlzLnN0YXRlLnNlbGVjdGVkSW5kZXg7fSxfdGhpcy5zZWxlY3RPcHRpb249ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gX3RoaXMuc2V0U3RhdGUoe3NlbGVjdGVkSW5kZXg6X3RoaXMucHJvcHMub3B0aW9ucy5pbmRleE9mKG9wdGlvbil9KTt9LF90aGlzLnNlbGVjdE9wdGlvbkJ5S2V5PWZ1bmN0aW9uKGssdil7cmV0dXJuIF90aGlzLnNldFN0YXRlKHtzZWxlY3RlZEluZGV4OmZpbmRJbmRleChfdGhpcy5wcm9wcy5vcHRpb25zLGZ1bmN0aW9uKG9wdGlvbil7cmV0dXJuIG9wdGlvbltrXT09PXY7fSl9KTt9LF90aGlzLnNlbGVjdE9wdGlvbkluZGV4PWZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gX3RoaXMuc2V0U3RhdGUoe3NlbGVjdGVkSW5kZXg6aW5kZXh9KTt9LF90ZW1wKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcyxfcmV0KTt9X2NyZWF0ZUNsYXNzKFNlZ21lbnRlZENvbnRyb2wsW3trZXk6J2luZmVyU2VsZWN0ZWRPcHRpb25JbmRleCcsdmFsdWU6ZnVuY3Rpb24gaW5mZXJTZWxlY3RlZE9wdGlvbkluZGV4KCl7dmFyIHByb3BzPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTp0aGlzLnByb3BzO3ZhciBzdGF0ZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMV06dGhpcy5zdGF0ZTtyZXR1cm4gZmluZEluZGV4KHByb3BzLm9wdGlvbnMsZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gb3B0aW9uLnByZXNzZWQ7fSl8fHN0YXRlLnNlbGVjdGVkSW5kZXg7fX0se2tleTonY29tcG9uZW50V2lsbE1vdW50Jyx2YWx1ZTpmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKXt0aGlzLnNldFN0YXRlKHtzZWxlY3RlZEluZGV4OnRoaXMuaW5mZXJTZWxlY3RlZE9wdGlvbkluZGV4KCl8fHRoaXMucHJvcHMuZGVmYXVsdE9wdGlvblNlbGVjdGVkSW5kZXh9KTt9fSx7a2V5Oidjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyx2YWx1ZTpmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcyl7aWYobmV4dFByb3BzLm9wdGlvbnMhPT10aGlzLnByb3BzLm9wdGlvbnMpe3RoaXMuc2V0U3RhdGUoe3NlbGVjdGVkSW5kZXg6dGhpcy5pbmZlclNlbGVjdGVkT3B0aW9uSW5kZXgobmV4dFByb3BzKX0pO319fSx7a2V5OidnZXROZXh0T3B0aW9uSW5kZXgnLHZhbHVlOmZ1bmN0aW9uIGdldE5leHRPcHRpb25JbmRleChjdXJyZW50T3B0aW9uSW5kZXgpe3ZhciBuZXh0PWN1cnJlbnRPcHRpb25JbmRleCsxO3JldHVybiBuZXh0PHRoaXMucHJvcHMub3B0aW9ucy5sZW5ndGg/bmV4dDowO319LHtrZXk6J2dldFByZXZpb3VzT3B0aW9uSW5kZXgnLHZhbHVlOmZ1bmN0aW9uIGdldFByZXZpb3VzT3B0aW9uSW5kZXgoY3VycmVudE9wdGlvbkluZGV4KXt2YXIgcHJldmlvdXM9Y3VycmVudE9wdGlvbkluZGV4LTE7cmV0dXJuIHByZXZpb3VzPDA/dGhpcy5wcm9wcy5vcHRpb25zLmxlbmd0aC0xOnByZXZpb3VzO319LHtrZXk6J3JlbmRlcicsdmFsdWU6ZnVuY3Rpb24gcmVuZGVyKCl7dmFyIF90aGlzMj10aGlzO3JldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYm91bmRsZXNzX2Fycm93X2tleV9uYXZpZ2F0aW9uX19fZGVmYXVsdC5hLF9leHRlbmRzKHt9LF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX19fZGVmYXVsdCgpKHRoaXMucHJvcHMsU2VnbWVudGVkQ29udHJvbC5pbnRlcm5hbEtleXMpLHtyb2xlOidyYWRpb2dyb3VwJyxjbGFzc05hbWU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2NsYXNzbmFtZXNfX19kZWZhdWx0KCkoJ2Itc2VnbWVudGVkLWNvbnRyb2wnLHRoaXMucHJvcHMuY2xhc3NOYW1lKSxtb2RlOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9ib3VuZGxlc3NfYXJyb3dfa2V5X25hdmlnYXRpb25fX19kZWZhdWx0LmEubW9kZS5IT1JJWk9OVEFMfSksdGhpcy5wcm9wcy5vcHRpb25zLm1hcChmdW5jdGlvbihwcm9wcyxpbmRleCl7cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfYnV0dG9uX19fZGVmYXVsdC5hLF9leHRlbmRzKHt9LHByb3BzLHtrZXk6cHJvcHMua2V5fHxpbmRleCwnYXJpYS1jaGVja2VkJzppbmRleD09PV90aGlzMi5zdGF0ZS5zZWxlY3RlZEluZGV4LGNvbXBvbmVudDpwcm9wcy5jb21wb25lbnR8fF90aGlzMi5wcm9wcy5vcHRpb25Db21wb25lbnQsY2xhc3NOYW1lOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9jbGFzc25hbWVzX19fZGVmYXVsdCgpKCdiLXNlZ21lbnRlZC1jb250cm9sLW9wdGlvbicscHJvcHMuY2xhc3NOYW1lLHsnYi1zZWdtZW50ZWQtY29udHJvbC1vcHRpb24tc2VsZWN0ZWQnOmluZGV4PT09X3RoaXMyLnN0YXRlLnNlbGVjdGVkSW5kZXh9KSxvblByZXNzZWQ6X3RoaXMyLmhhbmRsZU9wdGlvblNlbGVjdGlvbixwcmVzc2VkOmluZGV4PT09X3RoaXMyLnN0YXRlLnNlbGVjdGVkSW5kZXgscm9sZToncmFkaW8nfSkscHJvcHMuY2hpbGRyZW4pO30pKTt9fV0pO3JldHVybiBTZWdtZW50ZWRDb250cm9sO30oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLlB1cmVDb21wb25lbnQpO1NlZ21lbnRlZENvbnRyb2wucHJvcFR5cGVzPXsnKic6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uYW55LGRlZmF1bHRPcHRpb25TZWxlY3RlZEluZGV4Ol9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLm51bWJlcixvbk9wdGlvblNlbGVjdGVkOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmZ1bmMsb3B0aW9uQ29tcG9uZW50Ol9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uc3RyaW5nLF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmZ1bmNdKSxvcHRpb25zOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmFycmF5T2YoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uc2hhcGUoeycqJzpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5hbnksY2hpbGRyZW46X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0ubm9kZX0pKS5pc1JlcXVpcmVkfTtTZWdtZW50ZWRDb250cm9sLmRlZmF1bHRQcm9wcz17ZGVmYXVsdE9wdGlvblNlbGVjdGVkSW5kZXg6MCxvbk9wdGlvblNlbGVjdGVkOmZ1bmN0aW9uIG9uT3B0aW9uU2VsZWN0ZWQoKXt9LG9wdGlvbkNvbXBvbmVudDonYnV0dG9uJyxvcHRpb25zOltdfTtTZWdtZW50ZWRDb250cm9sLmludGVybmFsS2V5cz1PYmplY3Qua2V5cyhTZWdtZW50ZWRDb250cm9sLmRlZmF1bHRQcm9wcyk7LyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IFNlZ21lbnRlZENvbnRyb2w7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gaW5kZXguanMiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA1KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCAyMTgxYjllODZiZTgyMjZlYjk1MyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJvdW5kbGVzcy1hcnJvdy1rZXktbmF2aWdhdGlvblwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy1hcnJvdy1rZXktbmF2aWdhdGlvblwifVxuLy8gbW9kdWxlIGlkID0gMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtYnV0dG9uXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiYm91bmRsZXNzLWJ1dHRvblwifVxuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wifVxuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiY2xhc3NuYW1lc1wifVxuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJjb21tb25qczJcIjpcInJlYWN0XCJ9XG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBSZWFjdCwge1Byb3BUeXBlc30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5pbXBvcnQgQXJyb3dLZXlOYXZpZ2F0aW9uIGZyb20gJ2JvdW5kbGVzcy1hcnJvdy1rZXktbmF2aWdhdGlvbic7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ2JvdW5kbGVzcy1idXR0b24nO1xuaW1wb3J0IG9taXQgZnJvbSAnYm91bmRsZXNzLXV0aWxzLW9taXQta2V5cyc7XG5cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnIsIHRlc3QpIHtcbiAgICBsZXQgZm91bmQ7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIGlmICh0ZXN0KGFycltpXSkpIHtcbiAgICAgICAgICAgIGZvdW5kID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xufVxuXG4vKipcbl9fQSBjb250cm9sIGNvbnRhaW5pbmcgbXVsdGlwbGUgYnV0dG9ucywgb25seSBvbmUgb2Ygd2hpY2ggY2FuIGJlIGFjdGl2ZSBhdCBhIHRpbWUuX19cblxuU2VnbWVudGVkQ29udHJvbCBoYXMgbWFueSBwb3RlbnRpYWwgdXNlcywgdGhlIG1vc3QgY29tbW9uIGJlaW5nOlxuXG4xLiBUaGUgY29udHJvbHMgZm9yIGEgdGFiYmVkIHZpZXdcbjIuIEEgbW9kZSBzd2l0Y2hcblxuRXNzZW50aWFsbHksIGl0IGJlaGF2ZXMgbGlrZSBhIHJhZGlvIGdyb3VwIHdpdGhvdXQgYWN0dWFsbHkgdXNpbmcgaW5wdXQgY29udHJvbHMuIE9ubHkgb25lIG9wdGlvbiBjYW4gYmUgc2VsZWN0ZWQgYXQgYSB0aW1lLlxuXG4jIyMgQ29tcG9uZW50IEluc3RhbmNlIE1ldGhvZHNcblxuLSBgZ2V0U2VsZWN0ZWRPcHRpb24oKWAgcmV0cmlldmVzIHRoZSBvcHRpb24gdGhhdCBpcyBzZWxlY3RlZFxuLSBgZ2V0U2VsZWN0ZWRPcHRpb25JbmRleCgpYCByZXRyaWV2ZXMgdGhlIGluZGV4IG9mIHRoZSBvcHRpb24gdGhhdCBpcyBzZWxlY3RlZFxuLSBgc2VsZWN0T3B0aW9uKG9wdGlvbilgIGFsbG93cyBmb3IgcHJvZ3JhbW1hdGljIHN3aXRjaGluZyBvZiB0aGUgYWN0aXZlIFNlZ21lbnRlZENvbnRyb2wgb3B0aW9uXG4tIGBzZWxlY3RPcHRpb25CeUtleShrZXksIHZhbHVlKWAgYWxsb3dzIGZvciBwcm9ncmFtbWF0aWMgc3dpdGNoaW5nIG9mIHRoZSBhY3RpdmUgU2VnbWVudGVkQ29udHJvbCBvcHRpb24gdXNpbmcgYSB1bmlxdWUga2V5XG4tIGBzZWxlY3RPcHRpb25JbmRleChpbmRleClgIGFsbG93cyBmb3IgcHJvZ3JhbW1hdGljIHN3aXRjaGluZyBvZiB0aGUgYWN0aXZlIFNlZ21lbnRlZENvbnRyb2wgb3B0aW9uIGJ5IGluZGV4XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlZ21lbnRlZENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogYW55IFtSZWFjdC1zdXBwb3J0ZWQgYXR0cmlidXRlXShodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RhZ3MtYW5kLWF0dHJpYnV0ZXMuaHRtbCNodG1sLWF0dHJpYnV0ZXMpXG4gICAgICAgICAqL1xuICAgICAgICAnKic6IFByb3BUeXBlcy5hbnksXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldHMgdGhlIGluaXRpYWwgc2VsZWN0ZWQgb3B0aW9uIG9uIGZpcnN0IG1vdW50XG4gICAgICAgICAqL1xuICAgICAgICBkZWZhdWx0T3B0aW9uU2VsZWN0ZWRJbmRleDogUHJvcFR5cGVzLm51bWJlcixcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2FsbGVkIHdoZW4gYSBjaGlsZCBlbGVtZW50IGJlY29tZXMgc2VsZWN0ZWQgd2l0aCB0aGUgb3B0aW9uIGFuZCBvcHRpb24gaW5kZXhcbiAgICAgICAgICovXG4gICAgICAgIG9uT3B0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBwcm92aWRlIGEgY3VzdG9taXplZCBjb21wb25lbnQgdHlwZSBpZiBkZXNpcmVkLCBlaXRoZXIgYSBIVE1MIGVsZW1lbnQgbmFtZSBvciBSZWFjdENvbXBvbmVudFxuICAgICAgICAgKi9cbiAgICAgICAgb3B0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgICAgICAgIFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgICAgICBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgXSksXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHByb3Agb2JqZWN0cyB0byBiZSBhcHBsaWVkIGFnYWluc3QgdGhlIFNlZ21lbnRlZENvbnRyb2wgYnV0dG9ucywgYWNjZXB0cyBhbnkgdmFsaWQgUmVhY3QgcHJvcHNcbiAgICAgICAgICpcbiAgICAgICAgICogIyMjIyBFeGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqIGBgYGpzeFxuICAgICAgICAgKiBvcHRpb25zPXtbe1xuICAgICAgICAgKiAgICAgY2hpbGRyZW46ICdGb28nLFxuICAgICAgICAgKiAgICAgY2xhc3NOYW1lOiAnZm9vJyxcbiAgICAgICAgICogfSwge1xuICAgICAgICAgKiAgICAgY2hpbGRyZW46IDxzcGFuPkJhcjwvc3Bhbj4sXG4gICAgICAgICAqICAgICAnZGF0YS1pZCc6ICdiYXInLFxuICAgICAgICAgKiB9XX1cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqL1xuICAgICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICAgICAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogYW55IFtSZWFjdC1zdXBwb3J0ZWQgYXR0cmlidXRlXShodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RhZ3MtYW5kLWF0dHJpYnV0ZXMuaHRtbCNodG1sLWF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgJyonOiBQcm9wVHlwZXMuYW55LFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICkuaXNSZXF1aXJlZCxcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgICBkZWZhdWx0T3B0aW9uU2VsZWN0ZWRJbmRleDogMCxcbiAgICAgICAgb25PcHRpb25TZWxlY3RlZDogKCkgPT4ge30sXG4gICAgICAgIG9wdGlvbkNvbXBvbmVudDogJ2J1dHRvbicsXG4gICAgICAgIG9wdGlvbnM6IFtdLFxuICAgIH1cblxuICAgIHN0YXRpYyBpbnRlcm5hbEtleXMgPSBPYmplY3Qua2V5cyhTZWdtZW50ZWRDb250cm9sLmRlZmF1bHRQcm9wcylcblxuICAgIHN0YXRlID0ge1xuICAgICAgICBzZWxlY3RlZEluZGV4OiBudWxsLFxuICAgIH1cblxuICAgIGluZmVyU2VsZWN0ZWRPcHRpb25JbmRleChwcm9wcyA9IHRoaXMucHJvcHMsIHN0YXRlID0gdGhpcy5zdGF0ZSkge1xuICAgICAgICByZXR1cm4gZmluZEluZGV4KHByb3BzLm9wdGlvbnMsIChvcHRpb24pID0+IG9wdGlvbi5wcmVzc2VkKSB8fCBzdGF0ZS5zZWxlY3RlZEluZGV4O1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2VsZWN0ZWRJbmRleDogdGhpcy5pbmZlclNlbGVjdGVkT3B0aW9uSW5kZXgoKSB8fCB0aGlzLnByb3BzLmRlZmF1bHRPcHRpb25TZWxlY3RlZEluZGV4fSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgICAgaWYgKG5leHRQcm9wcy5vcHRpb25zICE9PSB0aGlzLnByb3BzLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3NlbGVjdGVkSW5kZXg6IHRoaXMuaW5mZXJTZWxlY3RlZE9wdGlvbkluZGV4KG5leHRQcm9wcyl9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE5leHRPcHRpb25JbmRleChjdXJyZW50T3B0aW9uSW5kZXgpIHtcbiAgICAgICAgbGV0IG5leHQgPSBjdXJyZW50T3B0aW9uSW5kZXggKyAxO1xuXG4gICAgICAgIHJldHVybiBuZXh0IDwgdGhpcy5wcm9wcy5vcHRpb25zLmxlbmd0aCA/IG5leHQgOiAwO1xuICAgIH1cblxuICAgIGdldFByZXZpb3VzT3B0aW9uSW5kZXgoY3VycmVudE9wdGlvbkluZGV4KSB7XG4gICAgICAgIGxldCBwcmV2aW91cyA9IGN1cnJlbnRPcHRpb25JbmRleCAtIDE7XG5cbiAgICAgICAgcmV0dXJuIHByZXZpb3VzIDwgMCA/IHRoaXMucHJvcHMub3B0aW9ucy5sZW5ndGggLSAxIDogcHJldmlvdXM7XG4gICAgfVxuXG4gICAgaGFuZGxlT3B0aW9uU2VsZWN0aW9uID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChldmVudC50YXJnZXQucGFyZW50RWxlbWVudC5jaGlsZHJlbiwgZXZlbnQudGFyZ2V0KTtcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZWxlY3RlZEluZGV4ICE9PSBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2VsZWN0ZWRJbmRleDogaW5kZXh9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbk9wdGlvblNlbGVjdGVkKHRoaXMucHJvcHMub3B0aW9uc1t0aGlzLnN0YXRlLnNlbGVjdGVkSW5kZXhdLCB0aGlzLnN0YXRlLnNlbGVjdGVkSW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgZ2V0U2VsZWN0ZWRPcHRpb24gPSAoKSA9PiB0aGlzLnByb3BzLm9wdGlvbnNbdGhpcy5zdGF0ZS5zZWxlY3RlZEluZGV4XVxuXG4gICAgLyoqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGdldFNlbGVjdGVkT3B0aW9uSW5kZXggPSAoKSA9PiB0aGlzLnN0YXRlLnNlbGVjdGVkSW5kZXhcblxuICAgIC8qKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBzZWxlY3RPcHRpb24gPSAob3B0aW9uKSA9PiB0aGlzLnNldFN0YXRlKHtzZWxlY3RlZEluZGV4OiB0aGlzLnByb3BzLm9wdGlvbnMuaW5kZXhPZihvcHRpb24pfSlcblxuICAgIC8qKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBzZWxlY3RPcHRpb25CeUtleSA9IChrLCB2KSA9PiB0aGlzLnNldFN0YXRlKHtzZWxlY3RlZEluZGV4OiBmaW5kSW5kZXgodGhpcy5wcm9wcy5vcHRpb25zLCAob3B0aW9uKSA9PiBvcHRpb25ba10gPT09IHYpfSlcblxuICAgIC8qKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBzZWxlY3RPcHRpb25JbmRleCA9IChpbmRleCkgPT4gdGhpcy5zZXRTdGF0ZSh7c2VsZWN0ZWRJbmRleDogaW5kZXh9KVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEFycm93S2V5TmF2aWdhdGlvblxuICAgICAgICAgICAgICAgIHsuLi5vbWl0KHRoaXMucHJvcHMsIFNlZ21lbnRlZENvbnRyb2wuaW50ZXJuYWxLZXlzKX1cbiAgICAgICAgICAgICAgICByb2xlPSdyYWRpb2dyb3VwJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goJ2Itc2VnbWVudGVkLWNvbnRyb2wnLCB0aGlzLnByb3BzLmNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgICAgbW9kZT17QXJyb3dLZXlOYXZpZ2F0aW9uLm1vZGUuSE9SSVpPTlRBTH0+XG4gICAgICAgICAgICAgICAge3RoaXMucHJvcHMub3B0aW9ucy5tYXAoKHByb3BzLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3Byb3BzLmtleSB8fCBpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY2hlY2tlZD17aW5kZXggPT09IHRoaXMuc3RhdGUuc2VsZWN0ZWRJbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudD17cHJvcHMuY29tcG9uZW50IHx8IHRoaXMucHJvcHMub3B0aW9uQ29tcG9uZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeCgnYi1zZWdtZW50ZWQtY29udHJvbC1vcHRpb24nLCBwcm9wcy5jbGFzc05hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYi1zZWdtZW50ZWQtY29udHJvbC1vcHRpb24tc2VsZWN0ZWQnOiBpbmRleCA9PT0gdGhpcy5zdGF0ZS5zZWxlY3RlZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblByZXNzZWQ9e3RoaXMuaGFuZGxlT3B0aW9uU2VsZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlc3NlZD17aW5kZXggPT09IHRoaXMuc3RhdGUuc2VsZWN0ZWRJbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9J3JhZGlvJz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L0Fycm93S2V5TmF2aWdhdGlvbj5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9ib3VuZGxlc3Mtc2VnbWVudGVkLWNvbnRyb2wvaW5kZXguanMiXSwic291cmNlUm9vdCI6IiJ9 |