-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path2016.7fdb0737.iframe.bundle.js
3 lines (3 loc) · 293 KB
/
2016.7fdb0737.iframe.bundle.js
1
2
3
/*! For license information please see 2016.7fdb0737.iframe.bundle.js.LICENSE.txt */
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[2016],{"./node_modules/react-input-autosize/lib/AutosizeInput.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),_react=__webpack_require__("./node_modules/react/index.js"),_react2=_interopRequireDefault(_react),_propTypes2=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var sizerStyle={position:"absolute",top:0,left:0,visibility:"hidden",height:0,overflow:"scroll",whiteSpace:"pre"},INPUT_PROPS_BLACKLIST=["extraWidth","injectStyles","inputClassName","inputRef","inputStyle","minWidth","onAutosize","placeholderIsMinWidth"],copyStyles=function copyStyles(styles,node){node.style.fontSize=styles.fontSize,node.style.fontFamily=styles.fontFamily,node.style.fontWeight=styles.fontWeight,node.style.fontStyle=styles.fontStyle,node.style.letterSpacing=styles.letterSpacing,node.style.textTransform=styles.textTransform},isIE=!("undefined"==typeof window||!window.navigator)&&/MSIE |Trident\/|Edge\//.test(window.navigator.userAgent),generateId=function generateId(){return isIE?"_"+Math.random().toString(36).substr(2,12):void 0},AutosizeInput=function(_Component){function AutosizeInput(props){!function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AutosizeInput);var _this=function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}(this,(AutosizeInput.__proto__||Object.getPrototypeOf(AutosizeInput)).call(this,props));return _this.inputRef=function(el){_this.input=el,"function"==typeof _this.props.inputRef&&_this.props.inputRef(el)},_this.placeHolderSizerRef=function(el){_this.placeHolderSizer=el},_this.sizerRef=function(el){_this.sizer=el},_this.state={inputWidth:props.minWidth,inputId:props.id||generateId()},_this}return function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(AutosizeInput,_Component),_createClass(AutosizeInput,[{key:"componentDidMount",value:function componentDidMount(){this.mounted=!0,this.copyInputStyles(),this.updateInputWidth()}},{key:"componentWillReceiveProps",value:function componentWillReceiveProps(nextProps){var id=nextProps.id;id!==this.props.id&&this.setState({inputId:id||generateId()})}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){prevState.inputWidth!==this.state.inputWidth&&"function"==typeof this.props.onAutosize&&this.props.onAutosize(this.state.inputWidth),this.updateInputWidth()}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.mounted=!1}},{key:"copyInputStyles",value:function copyInputStyles(){if(this.mounted&&window.getComputedStyle){var inputStyles=this.input&&window.getComputedStyle(this.input);inputStyles&&(copyStyles(inputStyles,this.sizer),this.placeHolderSizer&©Styles(inputStyles,this.placeHolderSizer))}}},{key:"updateInputWidth",value:function updateInputWidth(){if(this.mounted&&this.sizer&&void 0!==this.sizer.scrollWidth){var newInputWidth=void 0;newInputWidth=this.props.placeholder&&(!this.props.value||this.props.value&&this.props.placeholderIsMinWidth)?Math.max(this.sizer.scrollWidth,this.placeHolderSizer.scrollWidth)+2:this.sizer.scrollWidth+2,(newInputWidth+="number"===this.props.type&&void 0===this.props.extraWidth?16:parseInt(this.props.extraWidth)||0)<this.props.minWidth&&(newInputWidth=this.props.minWidth),newInputWidth!==this.state.inputWidth&&this.setState({inputWidth:newInputWidth})}}},{key:"getInput",value:function getInput(){return this.input}},{key:"focus",value:function focus(){this.input.focus()}},{key:"blur",value:function blur(){this.input.blur()}},{key:"select",value:function select(){this.input.select()}},{key:"renderStyles",value:function renderStyles(){var injectStyles=this.props.injectStyles;return isIE&&injectStyles?_react2.default.createElement("style",{dangerouslySetInnerHTML:{__html:"input#"+this.state.inputId+"::-ms-clear {display: none;}"}}):null}},{key:"render",value:function render(){var sizerValue=[this.props.defaultValue,this.props.value,""].reduce((function(previousValue,currentValue){return null!=previousValue?previousValue:currentValue})),wrapperStyle=_extends({},this.props.style);wrapperStyle.display||(wrapperStyle.display="inline-block");var inputStyle=_extends({boxSizing:"content-box",width:this.state.inputWidth+"px"},this.props.inputStyle),inputProps=function _objectWithoutProperties(obj,keys){var target={};for(var i in obj)keys.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}(this.props,[]);return function cleanInputProps(inputProps){INPUT_PROPS_BLACKLIST.forEach((function(field){return delete inputProps[field]}))}(inputProps),inputProps.className=this.props.inputClassName,inputProps.id=this.state.inputId,inputProps.style=inputStyle,_react2.default.createElement("div",{className:this.props.className,style:wrapperStyle},this.renderStyles(),_react2.default.createElement("input",_extends({},inputProps,{ref:this.inputRef})),_react2.default.createElement("div",{ref:this.sizerRef,style:sizerStyle},sizerValue),this.props.placeholder?_react2.default.createElement("div",{ref:this.placeHolderSizerRef,style:sizerStyle},this.props.placeholder):null)}}]),AutosizeInput}(_react.Component);AutosizeInput.propTypes={className:_propTypes2.default.string,defaultValue:_propTypes2.default.any,extraWidth:_propTypes2.default.oneOfType([_propTypes2.default.number,_propTypes2.default.string]),id:_propTypes2.default.string,injectStyles:_propTypes2.default.bool,inputClassName:_propTypes2.default.string,inputRef:_propTypes2.default.func,inputStyle:_propTypes2.default.object,minWidth:_propTypes2.default.oneOfType([_propTypes2.default.number,_propTypes2.default.string]),onAutosize:_propTypes2.default.func,onChange:_propTypes2.default.func,placeholder:_propTypes2.default.string,placeholderIsMinWidth:_propTypes2.default.bool,style:_propTypes2.default.object,value:_propTypes2.default.any},AutosizeInput.defaultProps={minWidth:1,injectStyles:!0},exports.A=AutosizeInput},"./node_modules/react-select/dist/react-select.es.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Async:()=>Async,AsyncCreatable:()=>AsyncCreatableSelect,Creatable:()=>CreatableSelect,Option:()=>Option,Value:()=>Value,default:()=>__WEBPACK_DEFAULT_EXPORT__,defaultArrowRenderer:()=>arrowRenderer,defaultClearRenderer:()=>clearRenderer,defaultFilterOptions:()=>filterOptions,defaultMenuRenderer:()=>menuRenderer});var react_input_autosize__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/react-input-autosize/lib/AutosizeInput.js"),classnames__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react-select/node_modules/classnames/index.js"),classnames__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__),prop_types__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/prop-types/index.js"),prop_types__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__),react__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/react/index.js"),react_dom__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./node_modules/react-dom/index.js"),arrowRenderer=function arrowRenderer(_ref){var onMouseDown=_ref.onMouseDown;return react__WEBPACK_IMPORTED_MODULE_3__.createElement("span",{className:"Select-arrow",onMouseDown})};arrowRenderer.propTypes={onMouseDown:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func};var clearRenderer=function clearRenderer(){return react__WEBPACK_IMPORTED_MODULE_3__.createElement("span",{className:"Select-clear",dangerouslySetInnerHTML:{__html:"×"}})},map=[{base:"A",letters:/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},{base:"AA",letters:/[\uA732]/g},{base:"AE",letters:/[\u00C6\u01FC\u01E2]/g},{base:"AO",letters:/[\uA734]/g},{base:"AU",letters:/[\uA736]/g},{base:"AV",letters:/[\uA738\uA73A]/g},{base:"AY",letters:/[\uA73C]/g},{base:"B",letters:/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},{base:"C",letters:/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},{base:"D",letters:/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},{base:"DZ",letters:/[\u01F1\u01C4]/g},{base:"Dz",letters:/[\u01F2\u01C5]/g},{base:"E",letters:/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},{base:"F",letters:/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},{base:"G",letters:/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},{base:"H",letters:/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},{base:"I",letters:/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},{base:"J",letters:/[\u004A\u24BF\uFF2A\u0134\u0248]/g},{base:"K",letters:/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},{base:"L",letters:/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},{base:"LJ",letters:/[\u01C7]/g},{base:"Lj",letters:/[\u01C8]/g},{base:"M",letters:/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},{base:"N",letters:/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},{base:"NJ",letters:/[\u01CA]/g},{base:"Nj",letters:/[\u01CB]/g},{base:"O",letters:/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},{base:"OI",letters:/[\u01A2]/g},{base:"OO",letters:/[\uA74E]/g},{base:"OU",letters:/[\u0222]/g},{base:"P",letters:/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},{base:"Q",letters:/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},{base:"R",letters:/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},{base:"S",letters:/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},{base:"T",letters:/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},{base:"TZ",letters:/[\uA728]/g},{base:"U",letters:/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},{base:"V",letters:/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},{base:"VY",letters:/[\uA760]/g},{base:"W",letters:/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},{base:"X",letters:/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},{base:"Y",letters:/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},{base:"Z",letters:/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}],stripDiacritics=function stripDiacritics(str){for(var i=0;i<map.length;i++)str=str.replace(map[i].letters,map[i].base);return str},isValid=function isValid(value){return null!=value&&""!==value},filterOptions=function filterOptions(options,filterValue,excludeOptions,props){return props.ignoreAccents&&(filterValue=stripDiacritics(filterValue)),props.ignoreCase&&(filterValue=filterValue.toLowerCase()),props.trimFilter&&(filterValue=function trim(str){return str.replace(/^\s+|\s+$/g,"")}(filterValue)),excludeOptions&&(excludeOptions=excludeOptions.map((function(i){return i[props.valueKey]}))),options.filter((function(option){if(excludeOptions&&excludeOptions.indexOf(option[props.valueKey])>-1)return!1;if(props.filterOption)return props.filterOption.call(void 0,option,filterValue);if(!filterValue)return!0;var value=option[props.valueKey],label=option[props.labelKey],hasValue=isValid(value),hasLabel=isValid(label);if(!hasValue&&!hasLabel)return!1;var valueTest=hasValue?String(value):null,labelTest=hasLabel?String(label):null;return props.ignoreAccents&&(valueTest&&"label"!==props.matchProp&&(valueTest=stripDiacritics(valueTest)),labelTest&&"value"!==props.matchProp&&(labelTest=stripDiacritics(labelTest))),props.ignoreCase&&(valueTest&&"label"!==props.matchProp&&(valueTest=valueTest.toLowerCase()),labelTest&&"value"!==props.matchProp&&(labelTest=labelTest.toLowerCase())),"start"===props.matchPos?valueTest&&"label"!==props.matchProp&&valueTest.substr(0,filterValue.length)===filterValue||labelTest&&"value"!==props.matchProp&&labelTest.substr(0,filterValue.length)===filterValue:valueTest&&"label"!==props.matchProp&&valueTest.indexOf(filterValue)>=0||labelTest&&"value"!==props.matchProp&&labelTest.indexOf(filterValue)>=0}))},menuRenderer=function menuRenderer(_ref){var focusedOption=_ref.focusedOption,focusOption=_ref.focusOption,inputValue=_ref.inputValue,instancePrefix=_ref.instancePrefix,onFocus=_ref.onFocus,onOptionRef=_ref.onOptionRef,onSelect=_ref.onSelect,optionClassName=_ref.optionClassName,optionComponent=_ref.optionComponent,optionRenderer=_ref.optionRenderer,options=_ref.options,removeValue=_ref.removeValue,selectValue=_ref.selectValue,valueArray=_ref.valueArray,valueKey=_ref.valueKey,Option=optionComponent;return options.map((function(option,i){var isSelected=valueArray&&valueArray.some((function(x){return x[valueKey]===option[valueKey]})),isFocused=option===focusedOption,optionClass=classnames__WEBPACK_IMPORTED_MODULE_1___default()(optionClassName,{"Select-option":!0,"is-selected":isSelected,"is-focused":isFocused,"is-disabled":option.disabled});return react__WEBPACK_IMPORTED_MODULE_3__.createElement(Option,{className:optionClass,focusOption,inputValue,instancePrefix,isDisabled:option.disabled,isFocused,isSelected,key:"option-"+i+"-"+option[valueKey],onFocus,onSelect,option,optionIndex:i,ref:function ref(_ref2){onOptionRef(_ref2,isFocused)},removeValue,selectValue},optionRenderer(option,i,inputValue))}))};menuRenderer.propTypes={focusOption:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,focusedOption:prop_types__WEBPACK_IMPORTED_MODULE_2___default().object,inputValue:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,instancePrefix:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,onFocus:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onOptionRef:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onSelect:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,optionClassName:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,optionComponent:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,optionRenderer:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,options:prop_types__WEBPACK_IMPORTED_MODULE_2___default().array,removeValue:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,selectValue:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,valueArray:prop_types__WEBPACK_IMPORTED_MODULE_2___default().array,valueKey:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string};var blockEvent=function(event){event.preventDefault(),event.stopPropagation(),"A"===event.target.tagName&&"href"in event.target&&(event.target.target?window.open(event.target.href,event.target.target):window.location.href=event.target.href)},_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},classCallCheck=(function(){function AwaitValue(value){this.value=value}function AsyncGenerator(gen){var front,back;function resume(key,arg){try{var result=gen[key](arg),value=result.value;value instanceof AwaitValue?Promise.resolve(value.value).then((function(arg){resume("next",arg)}),(function(arg){resume("throw",arg)})):settle(result.done?"return":"normal",result.value)}catch(err){settle("throw",err)}}function settle(type,value){switch(type){case"return":front.resolve({value,done:!0});break;case"throw":front.reject(value);break;default:front.resolve({value,done:!1})}(front=front.next)?resume(front.key,front.arg):back=null}this._invoke=function send(key,arg){return new Promise((function(resolve,reject){var request={key,arg,resolve,reject,next:null};back?back=back.next=request:(front=back=request,resume(key,arg))}))},"function"!=typeof gen.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(AsyncGenerator.prototype[Symbol.asyncIterator]=function(){return this}),AsyncGenerator.prototype.next=function(arg){return this._invoke("next",arg)},AsyncGenerator.prototype.throw=function(arg){return this._invoke("throw",arg)},AsyncGenerator.prototype.return=function(arg){return this._invoke("return",arg)}}(),function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}),createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),defineProperty=function(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj},_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},inherits=function(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)},objectWithoutProperties=function(obj,keys){var target={};for(var i in obj)keys.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target},possibleConstructorReturn=function(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call},Option=function(_React$Component){function Option(props){classCallCheck(this,Option);var _this=possibleConstructorReturn(this,(Option.__proto__||Object.getPrototypeOf(Option)).call(this,props));return _this.handleMouseDown=_this.handleMouseDown.bind(_this),_this.handleMouseEnter=_this.handleMouseEnter.bind(_this),_this.handleMouseMove=_this.handleMouseMove.bind(_this),_this.handleTouchStart=_this.handleTouchStart.bind(_this),_this.handleTouchEnd=_this.handleTouchEnd.bind(_this),_this.handleTouchMove=_this.handleTouchMove.bind(_this),_this.onFocus=_this.onFocus.bind(_this),_this}return inherits(Option,_React$Component),createClass(Option,[{key:"handleMouseDown",value:function handleMouseDown(event){event.preventDefault(),event.stopPropagation(),this.props.onSelect(this.props.option,event)}},{key:"handleMouseEnter",value:function handleMouseEnter(event){this.onFocus(event)}},{key:"handleMouseMove",value:function handleMouseMove(event){this.onFocus(event)}},{key:"handleTouchEnd",value:function handleTouchEnd(event){this.dragging||this.handleMouseDown(event)}},{key:"handleTouchMove",value:function handleTouchMove(){this.dragging=!0}},{key:"handleTouchStart",value:function handleTouchStart(){this.dragging=!1}},{key:"onFocus",value:function onFocus(event){this.props.isFocused||this.props.onFocus(this.props.option,event)}},{key:"render",value:function render(){var _props=this.props,option=_props.option,instancePrefix=_props.instancePrefix,optionIndex=_props.optionIndex,className=classnames__WEBPACK_IMPORTED_MODULE_1___default()(this.props.className,option.className);return option.disabled?react__WEBPACK_IMPORTED_MODULE_3__.createElement("div",{className,onMouseDown:blockEvent,onClick:blockEvent},this.props.children):react__WEBPACK_IMPORTED_MODULE_3__.createElement("div",{className,style:option.style,role:"option","aria-label":option.label,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,id:instancePrefix+"-option-"+optionIndex,title:option.title},this.props.children)}}]),Option}(react__WEBPACK_IMPORTED_MODULE_3__.Component);Option.propTypes={children:prop_types__WEBPACK_IMPORTED_MODULE_2___default().node,className:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,instancePrefix:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string.isRequired,isDisabled:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,isFocused:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,isSelected:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,onFocus:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onSelect:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onUnfocus:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,option:prop_types__WEBPACK_IMPORTED_MODULE_2___default().object.isRequired,optionIndex:prop_types__WEBPACK_IMPORTED_MODULE_2___default().number};var Value=function(_React$Component){function Value(props){classCallCheck(this,Value);var _this=possibleConstructorReturn(this,(Value.__proto__||Object.getPrototypeOf(Value)).call(this,props));return _this.handleMouseDown=_this.handleMouseDown.bind(_this),_this.onRemove=_this.onRemove.bind(_this),_this.handleTouchEndRemove=_this.handleTouchEndRemove.bind(_this),_this.handleTouchMove=_this.handleTouchMove.bind(_this),_this.handleTouchStart=_this.handleTouchStart.bind(_this),_this}return inherits(Value,_React$Component),createClass(Value,[{key:"handleMouseDown",value:function handleMouseDown(event){if("mousedown"!==event.type||0===event.button)return this.props.onClick?(event.stopPropagation(),void this.props.onClick(this.props.value,event)):void(this.props.value.href&&event.stopPropagation())}},{key:"onRemove",value:function onRemove(event){event.preventDefault(),event.stopPropagation(),this.props.onRemove(this.props.value)}},{key:"handleTouchEndRemove",value:function handleTouchEndRemove(event){this.dragging||this.onRemove(event)}},{key:"handleTouchMove",value:function handleTouchMove(){this.dragging=!0}},{key:"handleTouchStart",value:function handleTouchStart(){this.dragging=!1}},{key:"renderRemoveIcon",value:function renderRemoveIcon(){if(!this.props.disabled&&this.props.onRemove)return react__WEBPACK_IMPORTED_MODULE_3__.createElement("span",{className:"Select-value-icon","aria-hidden":"true",onMouseDown:this.onRemove,onTouchEnd:this.handleTouchEndRemove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove},"×")}},{key:"renderLabel",value:function renderLabel(){return this.props.onClick||this.props.value.href?react__WEBPACK_IMPORTED_MODULE_3__.createElement("a",{className:"Select-value-label",href:this.props.value.href,target:this.props.value.target,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleMouseDown},this.props.children):react__WEBPACK_IMPORTED_MODULE_3__.createElement("span",{className:"Select-value-label",role:"option","aria-selected":"true",id:this.props.id},this.props.children)}},{key:"render",value:function render(){return react__WEBPACK_IMPORTED_MODULE_3__.createElement("div",{className:classnames__WEBPACK_IMPORTED_MODULE_1___default()("Select-value",this.props.value.className),style:this.props.value.style,title:this.props.value.title},this.renderRemoveIcon(),this.renderLabel())}}]),Value}(react__WEBPACK_IMPORTED_MODULE_3__.Component);Value.propTypes={children:prop_types__WEBPACK_IMPORTED_MODULE_2___default().node,disabled:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,id:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,onClick:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onRemove:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,value:prop_types__WEBPACK_IMPORTED_MODULE_2___default().object.isRequired};var stringifyValue=function stringifyValue(value){return"string"==typeof value?value:null!==value&&JSON.stringify(value)||""},stringOrNode=prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,prop_types__WEBPACK_IMPORTED_MODULE_2___default().node]),stringOrNumber=prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,prop_types__WEBPACK_IMPORTED_MODULE_2___default().number]),instanceId=1,expandValue=function expandValue(value,props){var valueType=void 0===value?"undefined":_typeof(value);if("string"!==valueType&&"number"!==valueType&&"boolean"!==valueType)return value;var options=props.options,valueKey=props.valueKey;if(options)for(var i=0;i<options.length;i++)if(String(options[i][valueKey])===String(value))return options[i]},handleRequired=function handleRequired(value,multi){return!value||(multi?0===value.length:0===Object.keys(value).length)},Select$1=function(_React$Component){function Select(props){classCallCheck(this,Select);var _this=possibleConstructorReturn(this,(Select.__proto__||Object.getPrototypeOf(Select)).call(this,props));return["clearValue","focusOption","getOptionLabel","handleInputBlur","handleInputChange","handleInputFocus","handleInputValueChange","handleKeyDown","handleMenuScroll","handleMouseDown","handleMouseDownOnArrow","handleMouseDownOnMenu","handleTouchEnd","handleTouchEndClearValue","handleTouchMove","handleTouchOutside","handleTouchStart","handleValueClick","onOptionRef","removeValue","selectValue"].forEach((function(fn){return _this[fn]=_this[fn].bind(_this)})),_this.state={inputValue:"",isFocused:!1,isOpen:!1,isPseudoFocused:!1,required:!1},_this}return inherits(Select,_React$Component),createClass(Select,[{key:"componentWillMount",value:function componentWillMount(){this._instancePrefix="react-select-"+(this.props.instanceId||++instanceId)+"-";var valueArray=this.getValueArray(this.props.value);this.props.required&&this.setState({required:handleRequired(valueArray[0],this.props.multi)})}},{key:"componentDidMount",value:function componentDidMount(){void 0!==this.props.autofocus&&"undefined"!=typeof console&&console.warn("Warning: The autofocus prop has changed to autoFocus, support will be removed after [email protected]"),(this.props.autoFocus||this.props.autofocus)&&this.focus()}},{key:"componentWillReceiveProps",value:function componentWillReceiveProps(nextProps){var valueArray=this.getValueArray(nextProps.value,nextProps);nextProps.required?this.setState({required:handleRequired(valueArray[0],nextProps.multi)}):this.props.required&&this.setState({required:!1}),this.state.inputValue&&this.props.value!==nextProps.value&&nextProps.onSelectResetsInput&&this.setState({inputValue:this.handleInputValueChange("")})}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.menu&&this.focused&&this.state.isOpen&&!this.hasScrolledToOption){var focusedOptionNode=(0,react_dom__WEBPACK_IMPORTED_MODULE_4__.findDOMNode)(this.focused),menuNode=(0,react_dom__WEBPACK_IMPORTED_MODULE_4__.findDOMNode)(this.menu),scrollTop=menuNode.scrollTop,scrollBottom=scrollTop+menuNode.offsetHeight,optionTop=focusedOptionNode.offsetTop,optionBottom=optionTop+focusedOptionNode.offsetHeight;(scrollTop>optionTop||scrollBottom<optionBottom)&&(menuNode.scrollTop=focusedOptionNode.offsetTop),this.hasScrolledToOption=!0}else this.state.isOpen||(this.hasScrolledToOption=!1);if(this._scrollToFocusedOptionOnUpdate&&this.focused&&this.menu){this._scrollToFocusedOptionOnUpdate=!1;var focusedDOM=(0,react_dom__WEBPACK_IMPORTED_MODULE_4__.findDOMNode)(this.focused),menuDOM=(0,react_dom__WEBPACK_IMPORTED_MODULE_4__.findDOMNode)(this.menu),focusedRect=focusedDOM.getBoundingClientRect(),menuRect=menuDOM.getBoundingClientRect();focusedRect.bottom>menuRect.bottom?menuDOM.scrollTop=focusedDOM.offsetTop+focusedDOM.clientHeight-menuDOM.offsetHeight:focusedRect.top<menuRect.top&&(menuDOM.scrollTop=focusedDOM.offsetTop)}if(this.props.scrollMenuIntoView&&this.menuContainer){var menuContainerRect=this.menuContainer.getBoundingClientRect();window.innerHeight<menuContainerRect.bottom+this.props.menuBuffer&&window.scrollBy(0,menuContainerRect.bottom+this.props.menuBuffer-window.innerHeight)}if(prevProps.disabled!==this.props.disabled&&(this.setState({isFocused:!1}),this.closeMenu()),prevState.isOpen!==this.state.isOpen){this.toggleTouchOutsideEvent(this.state.isOpen);var handler=this.state.isOpen?this.props.onOpen:this.props.onClose;handler&&handler()}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.toggleTouchOutsideEvent(!1)}},{key:"toggleTouchOutsideEvent",value:function toggleTouchOutsideEvent(enabled){enabled?!document.addEventListener&&document.attachEvent?document.attachEvent("ontouchstart",this.handleTouchOutside):document.addEventListener("touchstart",this.handleTouchOutside):!document.removeEventListener&&document.detachEvent?document.detachEvent("ontouchstart",this.handleTouchOutside):document.removeEventListener("touchstart",this.handleTouchOutside)}},{key:"handleTouchOutside",value:function handleTouchOutside(event){this.wrapper&&!this.wrapper.contains(event.target)&&this.closeMenu()}},{key:"focus",value:function focus(){this.input&&this.input.focus()}},{key:"blurInput",value:function blurInput(){this.input&&this.input.blur()}},{key:"handleTouchMove",value:function handleTouchMove(){this.dragging=!0}},{key:"handleTouchStart",value:function handleTouchStart(){this.dragging=!1}},{key:"handleTouchEnd",value:function handleTouchEnd(event){this.dragging||this.handleMouseDown(event)}},{key:"handleTouchEndClearValue",value:function handleTouchEndClearValue(event){this.dragging||this.clearValue(event)}},{key:"handleMouseDown",value:function handleMouseDown(event){if(!(this.props.disabled||"mousedown"===event.type&&0!==event.button))if("INPUT"!==event.target.tagName){if(event.preventDefault(),!this.props.searchable)return this.focus(),this.setState({isOpen:!this.state.isOpen});if(this.state.isFocused){this.focus();var input=this.input,toOpen=!0;"function"==typeof input.getInput&&(input=input.getInput()),input.value="",this._focusAfterClear&&(toOpen=!1,this._focusAfterClear=!1),this.setState({isOpen:toOpen,isPseudoFocused:!1,focusedOption:null})}else this._openAfterFocus=this.props.openOnClick,this.focus(),this.setState({focusedOption:null})}else this.state.isFocused?this.state.isOpen||this.setState({isOpen:!0,isPseudoFocused:!1}):(this._openAfterFocus=this.props.openOnClick,this.focus())}},{key:"handleMouseDownOnArrow",value:function handleMouseDownOnArrow(event){this.props.disabled||"mousedown"===event.type&&0!==event.button||(this.state.isOpen?(event.stopPropagation(),event.preventDefault(),this.closeMenu()):this.setState({isOpen:!0}))}},{key:"handleMouseDownOnMenu",value:function handleMouseDownOnMenu(event){this.props.disabled||"mousedown"===event.type&&0!==event.button||(event.stopPropagation(),event.preventDefault(),this._openAfterFocus=!0,this.focus())}},{key:"closeMenu",value:function closeMenu(){this.props.onCloseResetsInput?this.setState({inputValue:this.handleInputValueChange(""),isOpen:!1,isPseudoFocused:this.state.isFocused&&!this.props.multi}):this.setState({isOpen:!1,isPseudoFocused:this.state.isFocused&&!this.props.multi}),this.hasScrolledToOption=!1}},{key:"handleInputFocus",value:function handleInputFocus(event){if(!this.props.disabled){var toOpen=this.state.isOpen||this._openAfterFocus||this.props.openOnFocus;toOpen=!this._focusAfterClear&&toOpen,this.props.onFocus&&this.props.onFocus(event),this.setState({isFocused:!0,isOpen:!!toOpen}),this._focusAfterClear=!1,this._openAfterFocus=!1}}},{key:"handleInputBlur",value:function handleInputBlur(event){if(!this.menu||this.menu!==document.activeElement&&!this.menu.contains(document.activeElement)){this.props.onBlur&&this.props.onBlur(event);var onBlurredState={isFocused:!1,isOpen:!1,isPseudoFocused:!1};this.props.onBlurResetsInput&&(onBlurredState.inputValue=this.handleInputValueChange("")),this.setState(onBlurredState)}else this.focus()}},{key:"handleInputChange",value:function handleInputChange(event){var newInputValue=event.target.value;this.state.inputValue!==event.target.value&&(newInputValue=this.handleInputValueChange(newInputValue)),this.setState({inputValue:newInputValue,isOpen:!0,isPseudoFocused:!1})}},{key:"setInputValue",value:function setInputValue(newValue){if(this.props.onInputChange){var nextState=this.props.onInputChange(newValue);null!=nextState&&"object"!==(void 0===nextState?"undefined":_typeof(nextState))&&(newValue=""+nextState)}this.setState({inputValue:newValue})}},{key:"handleInputValueChange",value:function handleInputValueChange(newValue){if(this.props.onInputChange){var nextState=this.props.onInputChange(newValue);null!=nextState&&"object"!==(void 0===nextState?"undefined":_typeof(nextState))&&(newValue=""+nextState)}return newValue}},{key:"handleKeyDown",value:function handleKeyDown(event){if(!(this.props.disabled||"function"==typeof this.props.onInputKeyDown&&(this.props.onInputKeyDown(event),event.defaultPrevented)))switch(event.keyCode){case 8:!this.state.inputValue&&this.props.backspaceRemoves&&(event.preventDefault(),this.popValue());break;case 9:if(event.shiftKey||!this.state.isOpen||!this.props.tabSelectsValue)break;event.preventDefault(),this.selectFocusedOption();break;case 13:event.preventDefault(),event.stopPropagation(),this.state.isOpen?this.selectFocusedOption():this.focusNextOption();break;case 27:event.preventDefault(),this.state.isOpen?(this.closeMenu(),event.stopPropagation()):this.props.clearable&&this.props.escapeClearsValue&&(this.clearValue(event),event.stopPropagation());break;case 32:if(this.props.searchable)break;if(event.preventDefault(),!this.state.isOpen){this.focusNextOption();break}event.stopPropagation(),this.selectFocusedOption();break;case 38:event.preventDefault(),this.focusPreviousOption();break;case 40:event.preventDefault(),this.focusNextOption();break;case 33:event.preventDefault(),this.focusPageUpOption();break;case 34:event.preventDefault(),this.focusPageDownOption();break;case 35:if(event.shiftKey)break;event.preventDefault(),this.focusEndOption();break;case 36:if(event.shiftKey)break;event.preventDefault(),this.focusStartOption();break;case 46:!this.state.inputValue&&this.props.deleteRemoves&&(event.preventDefault(),this.popValue())}}},{key:"handleValueClick",value:function handleValueClick(option,event){this.props.onValueClick&&this.props.onValueClick(option,event)}},{key:"handleMenuScroll",value:function handleMenuScroll(event){if(this.props.onMenuScrollToBottom){var target=event.target;target.scrollHeight>target.offsetHeight&&target.scrollHeight-target.offsetHeight-target.scrollTop<=0&&this.props.onMenuScrollToBottom()}}},{key:"getOptionLabel",value:function getOptionLabel(op){return op[this.props.labelKey]}},{key:"getValueArray",value:function getValueArray(value){var nextProps=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,props="object"===(void 0===nextProps?"undefined":_typeof(nextProps))?nextProps:this.props;if(props.multi){if("string"==typeof value&&(value=value.split(props.delimiter)),!Array.isArray(value)){if(null==value)return[];value=[value]}return value.map((function(value){return expandValue(value,props)})).filter((function(i){return i}))}var expandedValue=expandValue(value,props);return expandedValue?[expandedValue]:[]}},{key:"setValue",value:function setValue(value){var _this2=this;if(this.props.autoBlur&&this.blurInput(),this.props.required){var required=handleRequired(value,this.props.multi);this.setState({required})}this.props.simpleValue&&value&&(value=this.props.multi?value.map((function(i){return i[_this2.props.valueKey]})).join(this.props.delimiter):value[this.props.valueKey]),this.props.onChange&&this.props.onChange(value)}},{key:"selectValue",value:function selectValue(value){var _this3=this;this.props.closeOnSelect&&(this.hasScrolledToOption=!1);var updatedValue=this.props.onSelectResetsInput?"":this.state.inputValue;this.props.multi?this.setState({focusedIndex:null,inputValue:this.handleInputValueChange(updatedValue),isOpen:!this.props.closeOnSelect},(function(){_this3.getValueArray(_this3.props.value).some((function(i){return i[_this3.props.valueKey]===value[_this3.props.valueKey]}))?_this3.removeValue(value):_this3.addValue(value)})):this.setState({inputValue:this.handleInputValueChange(updatedValue),isOpen:!this.props.closeOnSelect,isPseudoFocused:this.state.isFocused},(function(){_this3.setValue(value)}))}},{key:"addValue",value:function addValue(value){var valueArray=this.getValueArray(this.props.value),visibleOptions=this._visibleOptions.filter((function(val){return!val.disabled})),lastValueIndex=visibleOptions.indexOf(value);this.setValue(valueArray.concat(value)),visibleOptions.length-1===lastValueIndex?this.focusOption(visibleOptions[lastValueIndex-1]):visibleOptions.length>lastValueIndex&&this.focusOption(visibleOptions[lastValueIndex+1])}},{key:"popValue",value:function popValue(){var valueArray=this.getValueArray(this.props.value);valueArray.length&&!1!==valueArray[valueArray.length-1].clearableValue&&this.setValue(this.props.multi?valueArray.slice(0,valueArray.length-1):null)}},{key:"removeValue",value:function removeValue(value){var _this4=this,valueArray=this.getValueArray(this.props.value);this.setValue(valueArray.filter((function(i){return i[_this4.props.valueKey]!==value[_this4.props.valueKey]}))),this.focus()}},{key:"clearValue",value:function clearValue(event){event&&"mousedown"===event.type&&0!==event.button||(event.preventDefault(),this.setValue(this.getResetValue()),this.setState({inputValue:this.handleInputValueChange(""),isOpen:!1},this.focus),this._focusAfterClear=!0)}},{key:"getResetValue",value:function getResetValue(){return void 0!==this.props.resetValue?this.props.resetValue:this.props.multi?[]:null}},{key:"focusOption",value:function focusOption(option){this.setState({focusedOption:option})}},{key:"focusNextOption",value:function focusNextOption(){this.focusAdjacentOption("next")}},{key:"focusPreviousOption",value:function focusPreviousOption(){this.focusAdjacentOption("previous")}},{key:"focusPageUpOption",value:function focusPageUpOption(){this.focusAdjacentOption("page_up")}},{key:"focusPageDownOption",value:function focusPageDownOption(){this.focusAdjacentOption("page_down")}},{key:"focusStartOption",value:function focusStartOption(){this.focusAdjacentOption("start")}},{key:"focusEndOption",value:function focusEndOption(){this.focusAdjacentOption("end")}},{key:"focusAdjacentOption",value:function focusAdjacentOption(dir){var options=this._visibleOptions.map((function(option,index){return{option,index}})).filter((function(option){return!option.option.disabled}));if(this._scrollToFocusedOptionOnUpdate=!0,!this.state.isOpen){var newState={focusedOption:this._focusedOption||(options.length?options["next"===dir?0:options.length-1].option:null),isOpen:!0};return this.props.onSelectResetsInput&&(newState.inputValue=""),void this.setState(newState)}if(options.length){for(var focusedIndex=-1,i=0;i<options.length;i++)if(this._focusedOption===options[i].option){focusedIndex=i;break}if("next"===dir&&-1!==focusedIndex)focusedIndex=(focusedIndex+1)%options.length;else if("previous"===dir)focusedIndex>0?focusedIndex-=1:focusedIndex=options.length-1;else if("start"===dir)focusedIndex=0;else if("end"===dir)focusedIndex=options.length-1;else if("page_up"===dir){var potentialIndex=focusedIndex-this.props.pageSize;focusedIndex=potentialIndex<0?0:potentialIndex}else if("page_down"===dir){var _potentialIndex=focusedIndex+this.props.pageSize;focusedIndex=_potentialIndex>options.length-1?options.length-1:_potentialIndex}-1===focusedIndex&&(focusedIndex=0),this.setState({focusedIndex:options[focusedIndex].index,focusedOption:options[focusedIndex].option})}}},{key:"getFocusedOption",value:function getFocusedOption(){return this._focusedOption}},{key:"selectFocusedOption",value:function selectFocusedOption(){if(this._focusedOption)return this.selectValue(this._focusedOption)}},{key:"renderLoading",value:function renderLoading(){if(this.props.isLoading)return react__WEBPACK_IMPORTED_MODULE_3__.createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},react__WEBPACK_IMPORTED_MODULE_3__.createElement("span",{className:"Select-loading"}))}},{key:"renderValue",value:function renderValue(valueArray,isOpen){var _this5=this,renderLabel=this.props.valueRenderer||this.getOptionLabel,ValueComponent=this.props.valueComponent;if(!valueArray.length){var showPlaceholder=function shouldShowPlaceholder(state,props,isOpen){var inputValue=state.inputValue,isPseudoFocused=state.isPseudoFocused,isFocused=state.isFocused,onSelectResetsInput=props.onSelectResetsInput;return!inputValue||!onSelectResetsInput&&!isOpen&&!isPseudoFocused&&!isFocused}(this.state,this.props,isOpen);return showPlaceholder?react__WEBPACK_IMPORTED_MODULE_3__.createElement("div",{className:"Select-placeholder"},this.props.placeholder):null}var onClick=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?valueArray.map((function(value,i){return react__WEBPACK_IMPORTED_MODULE_3__.createElement(ValueComponent,{disabled:_this5.props.disabled||!1===value.clearableValue,id:_this5._instancePrefix+"-value-"+i,instancePrefix:_this5._instancePrefix,key:"value-"+i+"-"+value[_this5.props.valueKey],onClick,onRemove:_this5.removeValue,placeholder:_this5.props.placeholder,value},renderLabel(value,i),react__WEBPACK_IMPORTED_MODULE_3__.createElement("span",{className:"Select-aria-only"}," "))})):function shouldShowValue(state,props){var inputValue=state.inputValue,isPseudoFocused=state.isPseudoFocused,isFocused=state.isFocused,onSelectResetsInput=props.onSelectResetsInput;return!inputValue||!onSelectResetsInput&&!(!isFocused&&isPseudoFocused||isFocused&&!isPseudoFocused)}(this.state,this.props)?(isOpen&&(onClick=null),react__WEBPACK_IMPORTED_MODULE_3__.createElement(ValueComponent,{disabled:this.props.disabled,id:this._instancePrefix+"-value-item",instancePrefix:this._instancePrefix,onClick,placeholder:this.props.placeholder,value:valueArray[0]},renderLabel(valueArray[0]))):void 0}},{key:"renderInput",value:function renderInput(valueArray,focusedOptionIndex){var _classNames,_this6=this,className=classnames__WEBPACK_IMPORTED_MODULE_1___default()("Select-input",this.props.inputProps.className),isOpen=this.state.isOpen,ariaOwns=classnames__WEBPACK_IMPORTED_MODULE_1___default()((defineProperty(_classNames={},this._instancePrefix+"-list",isOpen),defineProperty(_classNames,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),_classNames)),value=this.state.inputValue;!value||this.props.onSelectResetsInput||this.state.isFocused||(value="");var inputProps=_extends({},this.props.inputProps,{"aria-activedescendant":isOpen?this._instancePrefix+"-option-"+focusedOptionIndex:this._instancePrefix+"-value","aria-describedby":this.props["aria-describedby"],"aria-expanded":""+isOpen,"aria-haspopup":""+isOpen,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-owns":ariaOwns,className,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function ref(_ref){return _this6.input=_ref},role:"combobox",required:this.state.required,tabIndex:this.props.tabIndex,value});if(this.props.inputRenderer)return this.props.inputRenderer(inputProps);if(this.props.disabled||!this.props.searchable){var divProps=objectWithoutProperties(this.props.inputProps,[]),_ariaOwns=classnames__WEBPACK_IMPORTED_MODULE_1___default()(defineProperty({},this._instancePrefix+"-list",isOpen));return react__WEBPACK_IMPORTED_MODULE_3__.createElement("div",_extends({},divProps,{"aria-expanded":isOpen,"aria-owns":_ariaOwns,"aria-activedescendant":isOpen?this._instancePrefix+"-option-"+focusedOptionIndex:this._instancePrefix+"-value","aria-disabled":""+this.props.disabled,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],className,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function ref(_ref2){return _this6.input=_ref2},role:"combobox",style:{border:0,width:1,display:"inline-block"},tabIndex:this.props.tabIndex||0}))}return this.props.autosize?react__WEBPACK_IMPORTED_MODULE_3__.createElement(react_input_autosize__WEBPACK_IMPORTED_MODULE_0__.A,_extends({id:this.props.id},inputProps,{minWidth:"5"})):react__WEBPACK_IMPORTED_MODULE_3__.createElement("div",{className,key:"input-wrap",style:{display:"inline-block"}},react__WEBPACK_IMPORTED_MODULE_3__.createElement("input",_extends({id:this.props.id},inputProps)))}},{key:"renderClear",value:function renderClear(){var valueArray=this.getValueArray(this.props.value);if(this.props.clearable&&valueArray.length&&!this.props.disabled&&!this.props.isLoading){var ariaLabel=this.props.multi?this.props.clearAllText:this.props.clearValueText,clear=this.props.clearRenderer();return react__WEBPACK_IMPORTED_MODULE_3__.createElement("span",{"aria-label":ariaLabel,className:"Select-clear-zone",onMouseDown:this.clearValue,onTouchEnd:this.handleTouchEndClearValue,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,title:ariaLabel},clear)}}},{key:"renderArrow",value:function renderArrow(){if(this.props.arrowRenderer){var onMouseDown=this.handleMouseDownOnArrow,isOpen=this.state.isOpen,arrow=this.props.arrowRenderer({onMouseDown,isOpen});return arrow?react__WEBPACK_IMPORTED_MODULE_3__.createElement("span",{className:"Select-arrow-zone",onMouseDown},arrow):null}}},{key:"filterOptions",value:function filterOptions$$1(excludeOptions){var filterValue=this.state.inputValue,options=this.props.options||[];if(this.props.filterOptions){var filterOptions$$1="function"==typeof this.props.filterOptions?this.props.filterOptions:filterOptions;return filterOptions$$1(options,filterValue,excludeOptions,{filterOption:this.props.filterOption,ignoreAccents:this.props.ignoreAccents,ignoreCase:this.props.ignoreCase,labelKey:this.props.labelKey,matchPos:this.props.matchPos,matchProp:this.props.matchProp,trimFilter:this.props.trimFilter,valueKey:this.props.valueKey})}return options}},{key:"onOptionRef",value:function onOptionRef(ref,isFocused){isFocused&&(this.focused=ref)}},{key:"renderMenu",value:function renderMenu(options,valueArray,focusedOption){return options&&options.length?this.props.menuRenderer({focusedOption,focusOption:this.focusOption,inputValue:this.state.inputValue,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onOptionRef:this.onOptionRef,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options,removeValue:this.removeValue,selectValue:this.selectValue,valueArray,valueKey:this.props.valueKey}):this.props.noResultsText?react__WEBPACK_IMPORTED_MODULE_3__.createElement("div",{className:"Select-noresults"},this.props.noResultsText):null}},{key:"renderHiddenField",value:function renderHiddenField(valueArray){var _this7=this;if(this.props.name){if(this.props.joinValues){var value=valueArray.map((function(i){return stringifyValue(i[_this7.props.valueKey])})).join(this.props.delimiter);return react__WEBPACK_IMPORTED_MODULE_3__.createElement("input",{disabled:this.props.disabled,name:this.props.name,ref:function ref(_ref3){return _this7.value=_ref3},type:"hidden",value})}return valueArray.map((function(item,index){return react__WEBPACK_IMPORTED_MODULE_3__.createElement("input",{disabled:_this7.props.disabled,key:"hidden."+index,name:_this7.props.name,ref:"value"+index,type:"hidden",value:stringifyValue(item[_this7.props.valueKey])})}))}}},{key:"getFocusableOptionIndex",value:function getFocusableOptionIndex(selectedOption){var options=this._visibleOptions;if(!options.length)return null;var valueKey=this.props.valueKey,focusedOption=this.state.focusedOption||selectedOption;if(focusedOption&&!focusedOption.disabled){var focusedOptionIndex=-1;if(options.some((function(option,index){var isOptionEqual=option[valueKey]===focusedOption[valueKey];return isOptionEqual&&(focusedOptionIndex=index),isOptionEqual})),-1!==focusedOptionIndex)return focusedOptionIndex}for(var i=0;i<options.length;i++)if(!options[i].disabled)return i;return null}},{key:"renderOuter",value:function renderOuter(options,valueArray,focusedOption){var _this8=this,menu=this.renderMenu(options,valueArray,focusedOption);return menu?react__WEBPACK_IMPORTED_MODULE_3__.createElement("div",{ref:function ref(_ref5){return _this8.menuContainer=_ref5},className:"Select-menu-outer",style:this.props.menuContainerStyle},react__WEBPACK_IMPORTED_MODULE_3__.createElement("div",{className:"Select-menu",id:this._instancePrefix+"-list",onMouseDown:this.handleMouseDownOnMenu,onScroll:this.handleMenuScroll,ref:function ref(_ref4){return _this8.menu=_ref4},role:"listbox",style:this.props.menuStyle,tabIndex:-1},menu)):null}},{key:"render",value:function render(){var _this9=this,valueArray=this.getValueArray(this.props.value),options=this._visibleOptions=this.filterOptions(this.props.multi&&this.props.removeSelected?valueArray:null),isOpen=this.state.isOpen;this.props.multi&&!options.length&&valueArray.length&&!this.state.inputValue&&(isOpen=!1);var focusedOptionIndex=this.getFocusableOptionIndex(valueArray[0]),focusedOption=null;focusedOption=this._focusedOption=null!==focusedOptionIndex?options[focusedOptionIndex]:null;var className=classnames__WEBPACK_IMPORTED_MODULE_1___default()("Select",this.props.className,{"has-value":valueArray.length,"is-clearable":this.props.clearable,"is-disabled":this.props.disabled,"is-focused":this.state.isFocused,"is-loading":this.props.isLoading,"is-open":isOpen,"is-pseudo-focused":this.state.isPseudoFocused,"is-searchable":this.props.searchable,"Select--multi":this.props.multi,"Select--rtl":this.props.rtl,"Select--single":!this.props.multi}),removeMessage=null;return this.props.multi&&!this.props.disabled&&valueArray.length&&!this.state.inputValue&&this.state.isFocused&&this.props.backspaceRemoves&&(removeMessage=react__WEBPACK_IMPORTED_MODULE_3__.createElement("span",{id:this._instancePrefix+"-backspace-remove-message",className:"Select-aria-only","aria-live":"assertive"},this.props.backspaceToRemoveMessage.replace("{label}",valueArray[valueArray.length-1][this.props.labelKey]))),react__WEBPACK_IMPORTED_MODULE_3__.createElement("div",{ref:function ref(_ref7){return _this9.wrapper=_ref7},className,style:this.props.wrapperStyle},this.renderHiddenField(valueArray),react__WEBPACK_IMPORTED_MODULE_3__.createElement("div",{ref:function ref(_ref6){return _this9.control=_ref6},className:"Select-control",onKeyDown:this.handleKeyDown,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleTouchEnd,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,style:this.props.style},react__WEBPACK_IMPORTED_MODULE_3__.createElement("span",{className:"Select-multi-value-wrapper",id:this._instancePrefix+"-value"},this.renderValue(valueArray,isOpen),this.renderInput(valueArray,focusedOptionIndex)),removeMessage,this.renderLoading(),this.renderClear(),this.renderArrow()),isOpen?this.renderOuter(options,valueArray,focusedOption):null)}}]),Select}(react__WEBPACK_IMPORTED_MODULE_3__.Component);Select$1.propTypes={"aria-describedby":prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,"aria-label":prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,"aria-labelledby":prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,arrowRenderer:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,autoBlur:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,autoFocus:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,autofocus:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,autosize:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,backspaceRemoves:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,backspaceToRemoveMessage:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,className:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,clearAllText:stringOrNode,clearRenderer:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,clearValueText:stringOrNode,clearable:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,closeOnSelect:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,deleteRemoves:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,delimiter:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,disabled:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,escapeClearsValue:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,filterOption:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,filterOptions:prop_types__WEBPACK_IMPORTED_MODULE_2___default().any,id:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,ignoreAccents:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,ignoreCase:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,inputProps:prop_types__WEBPACK_IMPORTED_MODULE_2___default().object,inputRenderer:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,instanceId:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,isLoading:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,joinValues:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,labelKey:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,matchPos:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,matchProp:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,menuBuffer:prop_types__WEBPACK_IMPORTED_MODULE_2___default().number,menuContainerStyle:prop_types__WEBPACK_IMPORTED_MODULE_2___default().object,menuRenderer:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,menuStyle:prop_types__WEBPACK_IMPORTED_MODULE_2___default().object,multi:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,name:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,noResultsText:stringOrNode,onBlur:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onBlurResetsInput:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,onChange:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onClose:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onCloseResetsInput:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,onFocus:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onInputChange:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onInputKeyDown:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onMenuScrollToBottom:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onOpen:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onSelectResetsInput:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,onValueClick:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,openOnClick:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,openOnFocus:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,optionClassName:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,optionComponent:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,optionRenderer:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,options:prop_types__WEBPACK_IMPORTED_MODULE_2___default().array,pageSize:prop_types__WEBPACK_IMPORTED_MODULE_2___default().number,placeholder:stringOrNode,removeSelected:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,required:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,resetValue:prop_types__WEBPACK_IMPORTED_MODULE_2___default().any,rtl:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,scrollMenuIntoView:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,searchable:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,simpleValue:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,style:prop_types__WEBPACK_IMPORTED_MODULE_2___default().object,tabIndex:stringOrNumber,tabSelectsValue:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,trimFilter:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,value:prop_types__WEBPACK_IMPORTED_MODULE_2___default().any,valueComponent:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,valueKey:prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,valueRenderer:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,wrapperStyle:prop_types__WEBPACK_IMPORTED_MODULE_2___default().object},Select$1.defaultProps={arrowRenderer,autosize:!0,backspaceRemoves:!0,backspaceToRemoveMessage:"Press backspace to remove {label}",clearable:!0,clearAllText:"Clear all",clearRenderer,clearValueText:"Clear value",closeOnSelect:!0,deleteRemoves:!0,delimiter:",",disabled:!1,escapeClearsValue:!0,filterOptions,ignoreAccents:!0,ignoreCase:!0,inputProps:{},isLoading:!1,joinValues:!1,labelKey:"label",matchPos:"any",matchProp:"any",menuBuffer:0,menuRenderer,multi:!1,noResultsText:"No results found",onBlurResetsInput:!0,onCloseResetsInput:!0,onSelectResetsInput:!0,openOnClick:!0,optionComponent:Option,pageSize:5,placeholder:"Select...",removeSelected:!0,required:!1,rtl:!1,scrollMenuIntoView:!0,searchable:!0,simpleValue:!1,tabSelectsValue:!0,trimFilter:!0,valueComponent:Value,valueKey:"value"};var propTypes={autoload:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool.isRequired,cache:prop_types__WEBPACK_IMPORTED_MODULE_2___default().any,children:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func.isRequired,ignoreAccents:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,ignoreCase:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,loadOptions:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func.isRequired,loadingPlaceholder:prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,prop_types__WEBPACK_IMPORTED_MODULE_2___default().node]),multi:prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool,noResultsText:prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,prop_types__WEBPACK_IMPORTED_MODULE_2___default().node]),onChange:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onInputChange:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,options:prop_types__WEBPACK_IMPORTED_MODULE_2___default().array.isRequired,placeholder:prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,prop_types__WEBPACK_IMPORTED_MODULE_2___default().node]),searchPromptText:prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_2___default().string,prop_types__WEBPACK_IMPORTED_MODULE_2___default().node]),value:prop_types__WEBPACK_IMPORTED_MODULE_2___default().any},defaultCache={},defaultProps={autoload:!0,cache:defaultCache,children:function defaultChildren(props){return react__WEBPACK_IMPORTED_MODULE_3__.createElement(Select$1,props)},ignoreAccents:!0,ignoreCase:!0,loadingPlaceholder:"Loading...",options:[],searchPromptText:"Type to search"},Async=function(_Component){function Async(props,context){classCallCheck(this,Async);var _this=possibleConstructorReturn(this,(Async.__proto__||Object.getPrototypeOf(Async)).call(this,props,context));return _this._cache=props.cache===defaultCache?{}:props.cache,_this.state={inputValue:"",isLoading:!1,options:props.options},_this.onInputChange=_this.onInputChange.bind(_this),_this}return inherits(Async,_Component),createClass(Async,[{key:"componentDidMount",value:function componentDidMount(){this.props.autoload&&this.loadOptions("")}},{key:"componentWillReceiveProps",value:function componentWillReceiveProps(nextProps){nextProps.options!==this.props.options&&this.setState({options:nextProps.options})}},{key:"componentWillUnmount",value:function componentWillUnmount(){this._callback=null}},{key:"loadOptions",value:function loadOptions(inputValue){var _this2=this,loadOptions=this.props.loadOptions,cache=this._cache;if(cache&&Object.prototype.hasOwnProperty.call(cache,inputValue))return this._callback=null,void this.setState({isLoading:!1,options:cache[inputValue]});var callback=function callback(error,data){var options=data&&data.options||[];cache&&(cache[inputValue]=options),callback===_this2._callback&&(_this2._callback=null,_this2.setState({isLoading:!1,options}))};this._callback=callback;var promise=loadOptions(inputValue,callback);promise&&promise.then((function(data){return callback(0,data)}),(function(error){return callback()})),this._callback&&!this.state.isLoading&&this.setState({isLoading:!0})}},{key:"onInputChange",value:function onInputChange(inputValue){var _props=this.props,ignoreAccents=_props.ignoreAccents,ignoreCase=_props.ignoreCase,onInputChange=_props.onInputChange,newInputValue=inputValue;if(onInputChange){var value=onInputChange(newInputValue);null!=value&&"object"!==(void 0===value?"undefined":_typeof(value))&&(newInputValue=""+value)}var transformedInputValue=newInputValue;return ignoreAccents&&(transformedInputValue=stripDiacritics(transformedInputValue)),ignoreCase&&(transformedInputValue=transformedInputValue.toLowerCase()),this.setState({inputValue:newInputValue}),this.loadOptions(transformedInputValue),newInputValue}},{key:"noResultsText",value:function noResultsText(){var _props2=this.props,loadingPlaceholder=_props2.loadingPlaceholder,noResultsText=_props2.noResultsText,searchPromptText=_props2.searchPromptText,_state=this.state,inputValue=_state.inputValue;return _state.isLoading?loadingPlaceholder:inputValue&&noResultsText?noResultsText:searchPromptText}},{key:"focus",value:function focus(){this.select.focus()}},{key:"render",value:function render(){var _this3=this,_props3=this.props,children=_props3.children,loadingPlaceholder=_props3.loadingPlaceholder,placeholder=_props3.placeholder,_state2=this.state,isLoading=_state2.isLoading,options=_state2.options,props={noResultsText:this.noResultsText(),placeholder:isLoading?loadingPlaceholder:placeholder,options:isLoading&&loadingPlaceholder?[]:options,ref:function ref(_ref){return _this3.select=_ref}};return children(_extends({},this.props,props,{isLoading,onInputChange:this.onInputChange}))}}]),Async}(react__WEBPACK_IMPORTED_MODULE_3__.Component);Async.propTypes=propTypes,Async.defaultProps=defaultProps;var CreatableSelect=function(_React$Component){function CreatableSelect(props,context){classCallCheck(this,CreatableSelect);var _this=possibleConstructorReturn(this,(CreatableSelect.__proto__||Object.getPrototypeOf(CreatableSelect)).call(this,props,context));return _this.filterOptions=_this.filterOptions.bind(_this),_this.menuRenderer=_this.menuRenderer.bind(_this),_this.onInputKeyDown=_this.onInputKeyDown.bind(_this),_this.onInputChange=_this.onInputChange.bind(_this),_this.onOptionSelect=_this.onOptionSelect.bind(_this),_this}return inherits(CreatableSelect,_React$Component),createClass(CreatableSelect,[{key:"createNewOption",value:function createNewOption(){var _props=this.props,isValidNewOption=_props.isValidNewOption,newOptionCreator=_props.newOptionCreator,onNewOptionClick=_props.onNewOptionClick,_props$options=_props.options,options=void 0===_props$options?[]:_props$options;if(isValidNewOption({label:this.inputValue})){var option=newOptionCreator({label:this.inputValue,labelKey:this.labelKey,valueKey:this.valueKey});this.isOptionUnique({option,options})&&(onNewOptionClick?onNewOptionClick(option):(options.unshift(option),this.select.selectValue(option)))}}},{key:"filterOptions",value:function filterOptions$$1(){var _props2=this.props,filterOptions$$1=_props2.filterOptions,isValidNewOption=_props2.isValidNewOption,promptTextCreator=_props2.promptTextCreator,excludeOptions=(arguments.length<=2?void 0:arguments[2])||[],filteredOptions=filterOptions$$1.apply(void 0,arguments)||[];if(isValidNewOption({label:this.inputValue})){var _newOptionCreator=this.props.newOptionCreator,option=_newOptionCreator({label:this.inputValue,labelKey:this.labelKey,valueKey:this.valueKey});if(this.isOptionUnique({option,options:excludeOptions.concat(filteredOptions)})){var prompt=promptTextCreator(this.inputValue);this._createPlaceholderOption=_newOptionCreator({label:prompt,labelKey:this.labelKey,valueKey:this.valueKey}),filteredOptions.unshift(this._createPlaceholderOption)}}return filteredOptions}},{key:"isOptionUnique",value:function isOptionUnique(_ref){var option=_ref.option,options=_ref.options,isOptionUnique=this.props.isOptionUnique;return options=options||this.props.options,isOptionUnique({labelKey:this.labelKey,option,options,valueKey:this.valueKey})}},{key:"menuRenderer",value:function menuRenderer$$1(params){var menuRenderer$$1=this.props.menuRenderer;return menuRenderer$$1(_extends({},params,{onSelect:this.onOptionSelect,selectValue:this.onOptionSelect}))}},{key:"onInputChange",value:function onInputChange(input){var onInputChange=this.props.onInputChange;return this.inputValue=input,onInputChange&&(this.inputValue=onInputChange(input)),this.inputValue}},{key:"onInputKeyDown",value:function onInputKeyDown(event){var _props3=this.props,shouldKeyDownEventCreateNewOption=_props3.shouldKeyDownEventCreateNewOption,onInputKeyDown=_props3.onInputKeyDown,focusedOption=this.select.getFocusedOption();focusedOption&&focusedOption===this._createPlaceholderOption&&shouldKeyDownEventCreateNewOption({keyCode:event.keyCode})?(this.createNewOption(),event.preventDefault()):onInputKeyDown&&onInputKeyDown(event)}},{key:"onOptionSelect",value:function onOptionSelect(option){option===this._createPlaceholderOption?this.createNewOption():this.select.selectValue(option)}},{key:"focus",value:function focus(){this.select.focus()}},{key:"render",value:function render(){var _this2=this,_props4=this.props,refProp=_props4.ref,restProps=objectWithoutProperties(_props4,["ref"]),children=this.props.children;return children||(children=defaultChildren$2),children(_extends({},restProps,{allowCreate:!0,filterOptions:this.filterOptions,menuRenderer:this.menuRenderer,onInputChange:this.onInputChange,onInputKeyDown:this.onInputKeyDown,ref:function ref(_ref2){_this2.select=_ref2,_ref2&&(_this2.labelKey=_ref2.props.labelKey,_this2.valueKey=_ref2.props.valueKey),refProp&&refProp(_ref2)}}))}}]),CreatableSelect}(react__WEBPACK_IMPORTED_MODULE_3__.Component),defaultChildren$2=function defaultChildren(props){return react__WEBPACK_IMPORTED_MODULE_3__.createElement(Select$1,props)},isOptionUnique=function isOptionUnique(_ref3){var option=_ref3.option,options=_ref3.options,labelKey=_ref3.labelKey,valueKey=_ref3.valueKey;return!options||!options.length||0===options.filter((function(existingOption){return existingOption[labelKey]===option[labelKey]||existingOption[valueKey]===option[valueKey]})).length},isValidNewOption=function isValidNewOption(_ref4){return!!_ref4.label},newOptionCreator=function newOptionCreator(_ref5){var label=_ref5.label,labelKey=_ref5.labelKey,option={};return option[_ref5.valueKey]=label,option[labelKey]=label,option.className="Select-create-option-placeholder",option},promptTextCreator=function promptTextCreator(label){return'Create option "'+label+'"'},shouldKeyDownEventCreateNewOption=function shouldKeyDownEventCreateNewOption(_ref6){switch(_ref6.keyCode){case 9:case 13:case 188:return!0;default:return!1}};CreatableSelect.isOptionUnique=isOptionUnique,CreatableSelect.isValidNewOption=isValidNewOption,CreatableSelect.newOptionCreator=newOptionCreator,CreatableSelect.promptTextCreator=promptTextCreator,CreatableSelect.shouldKeyDownEventCreateNewOption=shouldKeyDownEventCreateNewOption,CreatableSelect.defaultProps={filterOptions,isOptionUnique,isValidNewOption,menuRenderer,newOptionCreator,promptTextCreator,shouldKeyDownEventCreateNewOption},CreatableSelect.propTypes={children:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,filterOptions:prop_types__WEBPACK_IMPORTED_MODULE_2___default().any,isOptionUnique:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,isValidNewOption:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,menuRenderer:prop_types__WEBPACK_IMPORTED_MODULE_2___default().any,newOptionCreator:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onInputChange:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onInputKeyDown:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,onNewOptionClick:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,options:prop_types__WEBPACK_IMPORTED_MODULE_2___default().array,promptTextCreator:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,ref:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func,shouldKeyDownEventCreateNewOption:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func};var AsyncCreatableSelect=function(_React$Component){function AsyncCreatableSelect(){return classCallCheck(this,AsyncCreatableSelect),possibleConstructorReturn(this,(AsyncCreatableSelect.__proto__||Object.getPrototypeOf(AsyncCreatableSelect)).apply(this,arguments))}return inherits(AsyncCreatableSelect,_React$Component),createClass(AsyncCreatableSelect,[{key:"focus",value:function focus(){this.select.focus()}},{key:"render",value:function render(){var _this2=this;return react__WEBPACK_IMPORTED_MODULE_3__.createElement(Async,this.props,(function(_ref){var ref=_ref.ref,asyncProps=objectWithoutProperties(_ref,["ref"]),asyncRef=ref;return react__WEBPACK_IMPORTED_MODULE_3__.createElement(CreatableSelect,asyncProps,(function(_ref2){var ref=_ref2.ref,creatableProps=objectWithoutProperties(_ref2,["ref"]),creatableRef=ref;return _this2.props.children(_extends({},creatableProps,{ref:function ref(select){creatableRef(select),asyncRef(select),_this2.select=select}}))}))}))}}]),AsyncCreatableSelect}(react__WEBPACK_IMPORTED_MODULE_3__.Component);AsyncCreatableSelect.propTypes={children:prop_types__WEBPACK_IMPORTED_MODULE_2___default().func.isRequired},AsyncCreatableSelect.defaultProps={children:function defaultChildren(props){return react__WEBPACK_IMPORTED_MODULE_3__.createElement(Select$1,props)}},Select$1.Async=Async,Select$1.AsyncCreatable=AsyncCreatableSelect,Select$1.Creatable=CreatableSelect,Select$1.Value=Value,Select$1.Option=Option;const __WEBPACK_DEFAULT_EXPORT__=Select$1},"./node_modules/react-select/node_modules/classnames/index.js":(module,exports)=>{var __WEBPACK_AMD_DEFINE_RESULT__;!function(){"use strict";var hasOwn={}.hasOwnProperty;function classNames(){for(var classes=[],i=0;i<arguments.length;i++){var arg=arguments[i];if(arg){var argType=typeof arg;if("string"===argType||"number"===argType)classes.push(arg);else if(Array.isArray(arg)&&arg.length){var inner=classNames.apply(null,arg);inner&&classes.push(inner)}else if("object"===argType)for(var key in arg)hasOwn.call(arg,key)&&arg[key]&&classes.push(key)}}return classes.join(" ")}module.exports?(classNames.default=classNames,module.exports=classNames):void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return classNames}.apply(exports,[]))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)}()}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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M0M0WCxXQUFXemYsUUFBVXlmLFdBQ3JCSyxPQUFPalksUUFBVTRYLGlCQUtoQixLQUZ3Qiw4QkFBRixXQUN0QixPQUFPQSxVQUNQLGdCQUZvQixPQUVwQiw2Q0FJSCxDQTVDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWFjdC1pbnB1dC1hdXRvc2l6ZS9saWIvQXV0b3NpemVJbnB1dC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcmVhY3Qtc2VsZWN0L2Rpc3QvcmVhY3Qtc2VsZWN0LmVzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcblx0dmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZSgncHJvcC10eXBlcycpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIHNpemVyU3R5bGUgPSB7XG5cdHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuXHR0b3A6IDAsXG5cdGxlZnQ6IDAsXG5cdHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuXHRoZWlnaHQ6IDAsXG5cdG92ZXJmbG93OiAnc2Nyb2xsJyxcblx0d2hpdGVTcGFjZTogJ3ByZSdcbn07XG5cbnZhciBJTlBVVF9QUk9QU19CTEFDS0xJU1QgPSBbJ2V4dHJhV2lkdGgnLCAnaW5qZWN0U3R5bGVzJywgJ2lucHV0Q2xhc3NOYW1lJywgJ2lucHV0UmVmJywgJ2lucHV0U3R5bGUnLCAnbWluV2lkdGgnLCAnb25BdXRvc2l6ZScsICdwbGFjZWhvbGRlcklzTWluV2lkdGgnXTtcblxudmFyIGNsZWFuSW5wdXRQcm9wcyA9IGZ1bmN0aW9uIGNsZWFuSW5wdXRQcm9wcyhpbnB1dFByb3BzKSB7XG5cdElOUFVUX1BST1BTX0JMQUNLTElTVC5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuXHRcdHJldHVybiBkZWxldGUgaW5wdXRQcm9wc1tmaWVsZF07XG5cdH0pO1xuXHRyZXR1cm4gaW5wdXRQcm9wcztcbn07XG5cbnZhciBjb3B5U3R5bGVzID0gZnVuY3Rpb24gY29weVN0eWxlcyhzdHlsZXMsIG5vZGUpIHtcblx0bm9kZS5zdHlsZS5mb250U2l6ZSA9IHN0eWxlcy5mb250U2l6ZTtcblx0bm9kZS5zdHlsZS5mb250RmFtaWx5ID0gc3R5bGVzLmZvbnRGYW1pbHk7XG5cdG5vZGUuc3R5bGUuZm9udFdlaWdodCA9IHN0eWxlcy5mb250V2VpZ2h0O1xuXHRub2RlLnN0eWxlLmZvbnRTdHlsZSA9IHN0eWxlcy5mb250U3R5bGU7XG5cdG5vZGUuc3R5bGUubGV0dGVyU3BhY2luZyA9IHN0eWxlcy5sZXR0ZXJTcGFjaW5nO1xuXHRub2RlLnN0eWxlLnRleHRUcmFuc2Zvcm0gPSBzdHlsZXMudGV4dFRyYW5zZm9ybTtcbn07XG5cbnZhciBpc0lFID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciA/IC9NU0lFIHxUcmlkZW50XFwvfEVkZ2VcXC8vLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpIDogZmFsc2U7XG5cbnZhciBnZW5lcmF0ZUlkID0gZnVuY3Rpb24gZ2VuZXJhdGVJZCgpIHtcblx0Ly8gd2Ugb25seSBuZWVkIGFuIGF1dG8tZ2VuZXJhdGVkIElEIGZvciBzdHlsZXNoZWV0IGluamVjdGlvbiwgd2hpY2ggaXMgb25seVxuXHQvLyB1c2VkIGZvciBJRS4gc28gaWYgdGhlIGJyb3dzZXIgaXMgbm90IElFLCB0aGlzIHNob3VsZCByZXR1cm4gdW5kZWZpbmVkLlxuXHRyZXR1cm4gaXNJRSA/ICdfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCAxMikgOiB1bmRlZmluZWQ7XG59O1xuXG52YXIgQXV0b3NpemVJbnB1dCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG5cdF9pbmhlcml0cyhBdXRvc2l6ZUlucHV0LCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBBdXRvc2l6ZUlucHV0KHByb3BzKSB7XG5cdFx0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIEF1dG9zaXplSW5wdXQpO1xuXG5cdFx0dmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEF1dG9zaXplSW5wdXQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihBdXRvc2l6ZUlucHV0KSkuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG5cdFx0X3RoaXMuaW5wdXRSZWYgPSBmdW5jdGlvbiAoZWwpIHtcblx0XHRcdF90aGlzLmlucHV0ID0gZWw7XG5cdFx0XHRpZiAodHlwZW9mIF90aGlzLnByb3BzLmlucHV0UmVmID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdF90aGlzLnByb3BzLmlucHV0UmVmKGVsKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0X3RoaXMucGxhY2VIb2xkZXJTaXplclJlZiA9IGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0X3RoaXMucGxhY2VIb2xkZXJTaXplciA9IGVsO1xuXHRcdH07XG5cblx0XHRfdGhpcy5zaXplclJlZiA9IGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0X3RoaXMuc2l6ZXIgPSBlbDtcblx0XHR9O1xuXG5cdFx0X3RoaXMuc3RhdGUgPSB7XG5cdFx0XHRpbnB1dFdpZHRoOiBwcm9wcy5taW5XaWR0aCxcblx0XHRcdGlucHV0SWQ6IHByb3BzLmlkIHx8IGdlbmVyYXRlSWQoKVxuXHRcdH07XG5cdFx0cmV0dXJuIF90aGlzO1xuXHR9XG5cblx0X2NyZWF0ZUNsYXNzKEF1dG9zaXplSW5wdXQsIFt7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcblx0XHRcdHRoaXMubW91bnRlZCA9IHRydWU7XG5cdFx0XHR0aGlzLmNvcHlJbnB1dFN0eWxlcygpO1xuXHRcdFx0dGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG5cdFx0XHR2YXIgaWQgPSBuZXh0UHJvcHMuaWQ7XG5cblx0XHRcdGlmIChpZCAhPT0gdGhpcy5wcm9wcy5pZCkge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHsgaW5wdXRJZDogaWQgfHwgZ2VuZXJhdGVJZCgpIH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2NvbXBvbmVudERpZFVwZGF0ZScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuXHRcdFx0aWYgKHByZXZTdGF0ZS5pbnB1dFdpZHRoICE9PSB0aGlzLnN0YXRlLmlucHV0V2lkdGgpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uQXV0b3NpemUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aGlzLnByb3BzLm9uQXV0b3NpemUodGhpcy5zdGF0ZS5pbnB1dFdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcblx0XHRcdHRoaXMubW91bnRlZCA9IGZhbHNlO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2NvcHlJbnB1dFN0eWxlcycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvcHlJbnB1dFN0eWxlcygpIHtcblx0XHRcdGlmICghdGhpcy5tb3VudGVkIHx8ICF3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgaW5wdXRTdHlsZXMgPSB0aGlzLmlucHV0ICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaW5wdXQpO1xuXHRcdFx0aWYgKCFpbnB1dFN0eWxlcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb3B5U3R5bGVzKGlucHV0U3R5bGVzLCB0aGlzLnNpemVyKTtcblx0XHRcdGlmICh0aGlzLnBsYWNlSG9sZGVyU2l6ZXIpIHtcblx0XHRcdFx0Y29weVN0eWxlcyhpbnB1dFN0eWxlcywgdGhpcy5wbGFjZUhvbGRlclNpemVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICd1cGRhdGVJbnB1dFdpZHRoJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gdXBkYXRlSW5wdXRXaWR0aCgpIHtcblx0XHRcdGlmICghdGhpcy5tb3VudGVkIHx8ICF0aGlzLnNpemVyIHx8IHR5cGVvZiB0aGlzLnNpemVyLnNjcm9sbFdpZHRoID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgbmV3SW5wdXRXaWR0aCA9IHZvaWQgMDtcblx0XHRcdGlmICh0aGlzLnByb3BzLnBsYWNlaG9sZGVyICYmICghdGhpcy5wcm9wcy52YWx1ZSB8fCB0aGlzLnByb3BzLnZhbHVlICYmIHRoaXMucHJvcHMucGxhY2Vob2xkZXJJc01pbldpZHRoKSkge1xuXHRcdFx0XHRuZXdJbnB1dFdpZHRoID0gTWF0aC5tYXgodGhpcy5zaXplci5zY3JvbGxXaWR0aCwgdGhpcy5wbGFjZUhvbGRlclNpemVyLnNjcm9sbFdpZHRoKSArIDI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdJbnB1dFdpZHRoID0gdGhpcy5zaXplci5zY3JvbGxXaWR0aCArIDI7XG5cdFx0XHR9XG5cdFx0XHQvLyBhZGQgZXh0cmFXaWR0aCB0byB0aGUgZGV0ZWN0ZWQgd2lkdGguIGZvciBudW1iZXIgdHlwZXMsIHRoaXMgZGVmYXVsdHMgdG8gMTYgdG8gYWxsb3cgZm9yIHRoZSBzdGVwcGVyIFVJXG5cdFx0XHR2YXIgZXh0cmFXaWR0aCA9IHRoaXMucHJvcHMudHlwZSA9PT0gJ251bWJlcicgJiYgdGhpcy5wcm9wcy5leHRyYVdpZHRoID09PSB1bmRlZmluZWQgPyAxNiA6IHBhcnNlSW50KHRoaXMucHJvcHMuZXh0cmFXaWR0aCkgfHwgMDtcblx0XHRcdG5ld0lucHV0V2lkdGggKz0gZXh0cmFXaWR0aDtcblx0XHRcdGlmIChuZXdJbnB1dFdpZHRoIDwgdGhpcy5wcm9wcy5taW5XaWR0aCkge1xuXHRcdFx0XHRuZXdJbnB1dFdpZHRoID0gdGhpcy5wcm9wcy5taW5XaWR0aDtcblx0XHRcdH1cblx0XHRcdGlmIChuZXdJbnB1dFdpZHRoICE9PSB0aGlzLnN0YXRlLmlucHV0V2lkdGgpIHtcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0aW5wdXRXaWR0aDogbmV3SW5wdXRXaWR0aFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdnZXRJbnB1dCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldElucHV0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuaW5wdXQ7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZm9jdXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBmb2N1cygpIHtcblx0XHRcdHRoaXMuaW5wdXQuZm9jdXMoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdibHVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gYmx1cigpIHtcblx0XHRcdHRoaXMuaW5wdXQuYmx1cigpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3NlbGVjdCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHNlbGVjdCgpIHtcblx0XHRcdHRoaXMuaW5wdXQuc2VsZWN0KCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyU3R5bGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyU3R5bGVzKCkge1xuXHRcdFx0Ly8gdGhpcyBtZXRob2QgaW5qZWN0cyBzdHlsZXMgdG8gaGlkZSBJRSdzIGNsZWFyIGluZGljYXRvciwgd2hpY2ggbWVzc2VzXG5cdFx0XHQvLyB3aXRoIGlucHV0IHNpemUgZGV0ZWN0aW9uLiB0aGUgc3R5bGVzaGVldCBpcyBvbmx5IGluamVjdGVkIHdoZW4gdGhlXG5cdFx0XHQvLyBicm93c2VyIGlzIElFLCBhbmQgY2FuIGFsc28gYmUgZGlzYWJsZWQgYnkgdGhlIGBpbmplY3RTdHlsZXNgIHByb3AuXG5cdFx0XHR2YXIgaW5qZWN0U3R5bGVzID0gdGhpcy5wcm9wcy5pbmplY3RTdHlsZXM7XG5cblx0XHRcdHJldHVybiBpc0lFICYmIGluamVjdFN0eWxlcyA/IF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdzdHlsZScsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcblx0XHRcdFx0XHRfX2h0bWw6ICdpbnB1dCMnICsgdGhpcy5zdGF0ZS5pbnB1dElkICsgJzo6LW1zLWNsZWFyIHtkaXNwbGF5OiBub25lO30nXG5cdFx0XHRcdH0gfSkgOiBudWxsO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3JlbmRlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBzaXplclZhbHVlID0gW3RoaXMucHJvcHMuZGVmYXVsdFZhbHVlLCB0aGlzLnByb3BzLnZhbHVlLCAnJ10ucmVkdWNlKGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUpIHtcblx0XHRcdFx0aWYgKHByZXZpb3VzVmFsdWUgIT09IG51bGwgJiYgcHJldmlvdXNWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGN1cnJlbnRWYWx1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHR2YXIgd3JhcHBlclN0eWxlID0gX2V4dGVuZHMoe30sIHRoaXMucHJvcHMuc3R5bGUpO1xuXHRcdFx0aWYgKCF3cmFwcGVyU3R5bGUuZGlzcGxheSkgd3JhcHBlclN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcblxuXHRcdFx0dmFyIGlucHV0U3R5bGUgPSBfZXh0ZW5kcyh7XG5cdFx0XHRcdGJveFNpemluZzogJ2NvbnRlbnQtYm94Jyxcblx0XHRcdFx0d2lkdGg6IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCArICdweCdcblx0XHRcdH0sIHRoaXMucHJvcHMuaW5wdXRTdHlsZSk7XG5cblx0XHRcdHZhciBpbnB1dFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHRoaXMucHJvcHMsIFtdKTtcblxuXHRcdFx0Y2xlYW5JbnB1dFByb3BzKGlucHV0UHJvcHMpO1xuXHRcdFx0aW5wdXRQcm9wcy5jbGFzc05hbWUgPSB0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lO1xuXHRcdFx0aW5wdXRQcm9wcy5pZCA9IHRoaXMuc3RhdGUuaW5wdXRJZDtcblx0XHRcdGlucHV0UHJvcHMuc3R5bGUgPSBpbnB1dFN0eWxlO1xuXG5cdFx0XHRyZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHR7IGNsYXNzTmFtZTogdGhpcy5wcm9wcy5jbGFzc05hbWUsIHN0eWxlOiB3cmFwcGVyU3R5bGUgfSxcblx0XHRcdFx0dGhpcy5yZW5kZXJTdHlsZXMoKSxcblx0XHRcdFx0X3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgX2V4dGVuZHMoe30sIGlucHV0UHJvcHMsIHsgcmVmOiB0aGlzLmlucHV0UmVmIH0pKSxcblx0XHRcdFx0X3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdFx0eyByZWY6IHRoaXMuc2l6ZXJSZWYsIHN0eWxlOiBzaXplclN0eWxlIH0sXG5cdFx0XHRcdFx0c2l6ZXJWYWx1ZVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0aGlzLnByb3BzLnBsYWNlaG9sZGVyID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdFx0eyByZWY6IHRoaXMucGxhY2VIb2xkZXJTaXplclJlZiwgc3R5bGU6IHNpemVyU3R5bGUgfSxcblx0XHRcdFx0XHR0aGlzLnByb3BzLnBsYWNlaG9sZGVyXG5cdFx0XHRcdCkgOiBudWxsXG5cdFx0XHQpO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBBdXRvc2l6ZUlucHV0O1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuQXV0b3NpemVJbnB1dC5wcm9wVHlwZXMgPSB7XG5cdGNsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIGNsYXNzTmFtZSBmb3IgdGhlIG91dGVyIGVsZW1lbnRcblx0ZGVmYXVsdFZhbHVlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmFueSwgLy8gZGVmYXVsdCBmaWVsZCB2YWx1ZVxuXHRleHRyYVdpZHRoOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbLy8gYWRkaXRpb25hbCB3aWR0aCBmb3IgaW5wdXQgZWxlbWVudFxuXHRfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlciwgX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmddKSxcblx0aWQ6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCAvLyBpZCB0byB1c2UgZm9yIHRoZSBpbnB1dCwgY2FuIGJlIHNldCBmb3IgY29uc2lzdGVudCBzbmFwc2hvdHNcblx0aW5qZWN0U3R5bGVzOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsIC8vIGluamVjdCB0aGUgY3VzdG9tIHN0eWxlc2hlZXQgdG8gaGlkZSBjbGVhciBVSSwgZGVmYXVsdHMgdG8gdHJ1ZVxuXHRpbnB1dENsYXNzTmFtZTogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIGNsYXNzTmFtZSBmb3IgdGhlIGlucHV0IGVsZW1lbnRcblx0aW5wdXRSZWY6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gcmVmIGNhbGxiYWNrIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRpbnB1dFN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCwgLy8gY3NzIHN0eWxlcyBmb3IgdGhlIGlucHV0IGVsZW1lbnRcblx0bWluV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFsvLyBtaW5pbXVtIHdpZHRoIGZvciBpbnB1dCBlbGVtZW50XG5cdF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLCBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZ10pLFxuXHRvbkF1dG9zaXplOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsIC8vIG9uQXV0b3NpemUgaGFuZGxlcjogZnVuY3Rpb24obmV3V2lkdGgpIHt9XG5cdG9uQ2hhbmdlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsIC8vIG9uQ2hhbmdlIGhhbmRsZXI6IGZ1bmN0aW9uKGV2ZW50KSB7fVxuXHRwbGFjZWhvbGRlcjogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIHBsYWNlaG9sZGVyIHRleHRcblx0cGxhY2Vob2xkZXJJc01pbldpZHRoOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmJvb2wsIC8vIGRvbid0IGNvbGxhcHNlIHNpemUgdG8gbGVzcyB0aGFuIHRoZSBwbGFjZWhvbGRlclxuXHRzdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsIC8vIGNzcyBzdHlsZXMgZm9yIHRoZSBvdXRlciBlbGVtZW50XG5cdHZhbHVlOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmFueSAvLyBmaWVsZCB2YWx1ZVxufTtcbkF1dG9zaXplSW5wdXQuZGVmYXVsdFByb3BzID0ge1xuXHRtaW5XaWR0aDogMSxcblx0aW5qZWN0U3R5bGVzOiB0cnVlXG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBBdXRvc2l6ZUlucHV0OyIsImltcG9ydCBBdXRvc2l6ZUlucHV0IGZyb20gJ3JlYWN0LWlucHV0LWF1dG9zaXplJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmaW5kRE9NTm9kZSB9IGZyb20gJ3JlYWN0LWRvbSc7XG5cbnZhciBhcnJvd1JlbmRlcmVyID0gZnVuY3Rpb24gYXJyb3dSZW5kZXJlcihfcmVmKSB7XG5cdHZhciBvbk1vdXNlRG93biA9IF9yZWYub25Nb3VzZURvd247XG5cblx0cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7XG5cdFx0Y2xhc3NOYW1lOiAnU2VsZWN0LWFycm93Jyxcblx0XHRvbk1vdXNlRG93bjogb25Nb3VzZURvd25cblx0fSk7XG59O1xuXG5hcnJvd1JlbmRlcmVyLnByb3BUeXBlcyA9IHtcblx0b25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jXG59O1xuXG52YXIgY2xlYXJSZW5kZXJlciA9IGZ1bmN0aW9uIGNsZWFyUmVuZGVyZXIoKSB7XG5cdHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCdzcGFuJywge1xuXHRcdGNsYXNzTmFtZTogJ1NlbGVjdC1jbGVhcicsXG5cdFx0ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiAnJnRpbWVzOycgfVxuXHR9KTtcbn07XG5cbnZhciBtYXAgPSBbeyAnYmFzZSc6ICdBJywgJ2xldHRlcnMnOiAvW1xcdTAwNDFcXHUyNEI2XFx1RkYyMVxcdTAwQzBcXHUwMEMxXFx1MDBDMlxcdTFFQTZcXHUxRUE0XFx1MUVBQVxcdTFFQThcXHUwMEMzXFx1MDEwMFxcdTAxMDJcXHUxRUIwXFx1MUVBRVxcdTFFQjRcXHUxRUIyXFx1MDIyNlxcdTAxRTBcXHUwMEM0XFx1MDFERVxcdTFFQTJcXHUwMEM1XFx1MDFGQVxcdTAxQ0RcXHUwMjAwXFx1MDIwMlxcdTFFQTBcXHUxRUFDXFx1MUVCNlxcdTFFMDBcXHUwMTA0XFx1MDIzQVxcdTJDNkZdL2cgfSwgeyAnYmFzZSc6ICdBQScsICdsZXR0ZXJzJzogL1tcXHVBNzMyXS9nIH0sIHsgJ2Jhc2UnOiAnQUUnLCAnbGV0dGVycyc6IC9bXFx1MDBDNlxcdTAxRkNcXHUwMUUyXS9nIH0sIHsgJ2Jhc2UnOiAnQU8nLCAnbGV0dGVycyc6IC9bXFx1QTczNF0vZyB9LCB7ICdiYXNlJzogJ0FVJywgJ2xldHRlcnMnOiAvW1xcdUE3MzZdL2cgfSwgeyAnYmFzZSc6ICdBVicsICdsZXR0ZXJzJzogL1tcXHVBNzM4XFx1QTczQV0vZyB9LCB7ICdiYXNlJzogJ0FZJywgJ2xldHRlcnMnOiAvW1xcdUE3M0NdL2cgfSwgeyAnYmFzZSc6ICdCJywgJ2xldHRlcnMnOiAvW1xcdTAwNDJcXHUyNEI3XFx1RkYyMlxcdTFFMDJcXHUxRTA0XFx1MUUwNlxcdTAyNDNcXHUwMTgyXFx1MDE4MV0vZyB9LCB7ICdiYXNlJzogJ0MnLCAnbGV0dGVycyc6IC9bXFx1MDA0M1xcdTI0QjhcXHVGRjIzXFx1MDEwNlxcdTAxMDhcXHUwMTBBXFx1MDEwQ1xcdTAwQzdcXHUxRTA4XFx1MDE4N1xcdTAyM0JcXHVBNzNFXS9nIH0sIHsgJ2Jhc2UnOiAnRCcsICdsZXR0ZXJzJzogL1tcXHUwMDQ0XFx1MjRCOVxcdUZGMjRcXHUxRTBBXFx1MDEwRVxcdTFFMENcXHUxRTEwXFx1MUUxMlxcdTFFMEVcXHUwMTEwXFx1MDE4QlxcdTAxOEFcXHUwMTg5XFx1QTc3OV0vZyB9LCB7ICdiYXNlJzogJ0RaJywgJ2xldHRlcnMnOiAvW1xcdTAxRjFcXHUwMUM0XS9nIH0sIHsgJ2Jhc2UnOiAnRHonLCAnbGV0dGVycyc6IC9bXFx1MDFGMlxcdTAxQzVdL2cgfSwgeyAnYmFzZSc6ICdFJywgJ2xldHRlcnMnOiAvW1xcdTAwNDVcXHUyNEJBXFx1RkYyNVxcdTAwQzhcXHUwMEM5XFx1MDBDQVxcdTFFQzBcXHUxRUJFXFx1MUVDNFxcdTFFQzJcXHUxRUJDXFx1MDExMlxcdTFFMTRcXHUxRTE2XFx1MDExNFxcdTAxMTZcXHUwMENCXFx1MUVCQVxcdTAxMUFcXHUwMjA0XFx1MDIwNlxcdTFFQjhcXHUxRUM2XFx1MDIyOFxcdTFFMUNcXHUwMTE4XFx1MUUxOFxcdTFFMUFcXHUwMTkwXFx1MDE4RV0vZyB9LCB7ICdiYXNlJzogJ0YnLCAnbGV0dGVycyc6IC9bXFx1MDA0NlxcdTI0QkJcXHVGRjI2XFx1MUUxRVxcdTAxOTFcXHVBNzdCXS9nIH0sIHsgJ2Jhc2UnOiAnRycsICdsZXR0ZXJzJzogL1tcXHUwMDQ3XFx1MjRCQ1xcdUZGMjdcXHUwMUY0XFx1MDExQ1xcdTFFMjBcXHUwMTFFXFx1MDEyMFxcdTAxRTZcXHUwMTIyXFx1MDFFNFxcdTAxOTNcXHVBN0EwXFx1QTc3RFxcdUE3N0VdL2cgfSwgeyAnYmFzZSc6ICdIJywgJ2xldHRlcnMnOiAvW1xcdTAwNDhcXHUyNEJEXFx1RkYyOFxcdTAxMjRcXHUxRTIyXFx1MUUyNlxcdTAyMUVcXHUxRTI0XFx1MUUyOFxcdTFFMkFcXHUwMTI2XFx1MkM2N1xcdTJDNzVcXHVBNzhEXS9nIH0sIHsgJ2Jhc2UnOiAnSScsICdsZXR0ZXJzJzogL1tcXHUwMDQ5XFx1MjRCRVxcdUZGMjlcXHUwMENDXFx1MDBDRFxcdTAwQ0VcXHUwMTI4XFx1MDEyQVxcdTAxMkNcXHUwMTMwXFx1MDBDRlxcdTFFMkVcXHUxRUM4XFx1MDFDRlxcdTAyMDhcXHUwMjBBXFx1MUVDQVxcdTAxMkVcXHUxRTJDXFx1MDE5N10vZyB9LCB7ICdiYXNlJzogJ0onLCAnbGV0dGVycyc6IC9bXFx1MDA0QVxcdTI0QkZcXHVGRjJBXFx1MDEzNFxcdTAyNDhdL2cgfSwgeyAnYmFzZSc6ICdLJywgJ2xldHRlcnMnOiAvW1xcdTAwNEJcXHUyNEMwXFx1RkYyQlxcdTFFMzBcXHUwMUU4XFx1MUUzMlxcdTAxMzZcXHUxRTM0XFx1MDE5OFxcdTJDNjlcXHVBNzQwXFx1QTc0MlxcdUE3NDRcXHVBN0EyXS9nIH0sIHsgJ2Jhc2UnOiAnTCcsICdsZXR0ZXJzJzogL1tcXHUwMDRDXFx1MjRDMVxcdUZGMkNcXHUwMTNGXFx1MDEzOVxcdTAxM0RcXHUxRTM2XFx1MUUzOFxcdTAxM0JcXHUxRTNDXFx1MUUzQVxcdTAxNDFcXHUwMjNEXFx1MkM2MlxcdTJDNjBcXHVBNzQ4XFx1QTc0NlxcdUE3ODBdL2cgfSwgeyAnYmFzZSc6ICdMSicsICdsZXR0ZXJzJzogL1tcXHUwMUM3XS9nIH0sIHsgJ2Jhc2UnOiAnTGonLCAnbGV0dGVycyc6IC9bXFx1MDFDOF0vZyB9LCB7ICdiYXNlJzogJ00nLCAnbGV0dGVycyc6IC9bXFx1MDA0RFxcdTI0QzJcXHVGRjJEXFx1MUUzRVxcdTFFNDBcXHUxRTQyXFx1MkM2RVxcdTAxOUNdL2cgfSwgeyAnYmFzZSc6ICdOJywgJ2xldHRlcnMnOiAvW1xcdTAwNEVcXHUyNEMzXFx1RkYyRVxcdTAxRjhcXHUwMTQzXFx1MDBEMVxcdTFFNDRcXHUwMTQ3XFx1MUU0NlxcdTAxNDVcXHUxRTRBXFx1MUU0OFxcdTAyMjBcXHUwMTlEXFx1QTc5MFxcdUE3QTRdL2cgfSwgeyAnYmFzZSc6ICdOSicsICdsZXR0ZXJzJzogL1tcXHUwMUNBXS9nIH0sIHsgJ2Jhc2UnOiAnTmonLCAnbGV0dGVycyc6IC9bXFx1MDFDQl0vZyB9LCB7ICdiYXNlJzogJ08nLCAnbGV0dGVycyc6IC9bXFx1MDA0RlxcdTI0QzRcXHVGRjJGXFx1MDBEMlxcdTAwRDNcXHUwMEQ0XFx1MUVEMlxcdTFFRDBcXHUxRUQ2XFx1MUVENFxcdTAwRDVcXHUxRTRDXFx1MDIyQ1xcdTFFNEVcXHUwMTRDXFx1MUU1MFxcdTFFNTJcXHUwMTRFXFx1MDIyRVxcdTAyMzBcXHUwMEQ2XFx1MDIyQVxcdTFFQ0VcXHUwMTUwXFx1MDFEMVxcdTAyMENcXHUwMjBFXFx1MDFBMFxcdTFFRENcXHUxRURBXFx1MUVFMFxcdTFFREVcXHUxRUUyXFx1MUVDQ1xcdTFFRDhcXHUwMUVBXFx1MDFFQ1xcdTAwRDhcXHUwMUZFXFx1MDE4NlxcdTAxOUZcXHVBNzRBXFx1QTc0Q10vZyB9LCB7ICdiYXNlJzogJ09JJywgJ2xldHRlcnMnOiAvW1xcdTAxQTJdL2cgfSwgeyAnYmFzZSc6ICdPTycsICdsZXR0ZXJzJzogL1tcXHVBNzRFXS9nIH0sIHsgJ2Jhc2UnOiAnT1UnLCAnbGV0dGVycyc6IC9bXFx1MDIyMl0vZyB9LCB7ICdiYXNlJzogJ1AnLCAnbGV0dGVycyc6IC9bXFx1MDA1MFxcdTI0QzVcXHVGRjMwXFx1MUU1NFxcdTFFNTZcXHUwMUE0XFx1MkM2M1xcdUE3NTBcXHVBNzUyXFx1QTc1NF0vZyB9LCB7ICdiYXNlJzogJ1EnLCAnbGV0dGVycyc6IC9bXFx1MDA1MVxcdTI0QzZcXHVGRjMxXFx1QTc1NlxcdUE3NThcXHUwMjRBXS9nIH0sIHsgJ2Jhc2UnOiAnUicsICdsZXR0ZXJzJzogL1tcXHUwMDUyXFx1MjRDN1xcdUZGMzJcXHUwMTU0XFx1MUU1OFxcdTAxNThcXHUwMjEwXFx1MDIxMlxcdTFFNUFcXHUxRTVDXFx1MDE1NlxcdTFFNUVcXHUwMjRDXFx1MkM2NFxcdUE3NUFcXHVBN0E2XFx1QTc4Ml0vZyB9LCB7ICdiYXNlJzogJ1MnLCAnbGV0dGVycyc6IC9bXFx1MDA1M1xcdTI0QzhcXHVGRjMzXFx1MUU5RVxcdTAxNUFcXHUxRTY0XFx1MDE1Q1xcdTFFNjBcXHUwMTYwXFx1MUU2NlxcdTFFNjJcXHUxRTY4XFx1MDIxOFxcdTAxNUVcXHUyQzdFXFx1QTdBOFxcdUE3ODRdL2cgfSwgeyAnYmFzZSc6ICdUJywgJ2xldHRlcnMnOiAvW1xcdTAwNTRcXHUyNEM5XFx1RkYzNFxcdTFFNkFcXHUwMTY0XFx1MUU2Q1xcdTAyMUFcXHUwMTYyXFx1MUU3MFxcdTFFNkVcXHUwMTY2XFx1MDFBQ1xcdTAxQUVcXHUwMjNFXFx1QTc4Nl0vZyB9LCB7ICdiYXNlJzogJ1RaJywgJ2xldHRlcnMnOiAvW1xcdUE3MjhdL2cgfSwgeyAnYmFzZSc6ICdVJywgJ2xldHRlcnMnOiAvW1xcdTAwNTVcXHUyNENBXFx1RkYzNVxcdTAwRDlcXHUwMERBXFx1MDBEQlxcdTAxNjhcXHUxRTc4XFx1MDE2QVxcdTFFN0FcXHUwMTZDXFx1MDBEQ1xcdTAxREJcXHUwMUQ3XFx1MDFENVxcdTAxRDlcXHUxRUU2XFx1MDE2RVxcdTAxNzBcXHUwMUQzXFx1MDIxNFxcdTAyMTZcXHUwMUFGXFx1MUVFQVxcdTFFRThcXHUxRUVFXFx1MUVFQ1xcdTFFRjBcXHUxRUU0XFx1MUU3MlxcdTAxNzJcXHUxRTc2XFx1MUU3NFxcdTAyNDRdL2cgfSwgeyAnYmFzZSc6ICdWJywgJ2xldHRlcnMnOiAvW1xcdTAwNTZcXHUyNENCXFx1RkYzNlxcdTFFN0NcXHUxRTdFXFx1MDFCMlxcdUE3NUVcXHUwMjQ1XS9nIH0sIHsgJ2Jhc2UnOiAnVlknLCAnbGV0dGVycyc6IC9bXFx1QTc2MF0vZyB9LCB7ICdiYXNlJzogJ1cnLCAnbGV0dGVycyc6IC9bXFx1MDA1N1xcdTI0Q0NcXHVGRjM3XFx1MUU4MFxcdTFFODJcXHUwMTc0XFx1MUU4NlxcdTFFODRcXHUxRTg4XFx1MkM3Ml0vZyB9LCB7ICdiYXNlJzogJ1gnLCAnbGV0dGVycyc6IC9bXFx1MDA1OFxcdTI0Q0RcXHVGRjM4XFx1MUU4QVxcdTFFOENdL2cgfSwgeyAnYmFzZSc6ICdZJywgJ2xldHRlcnMnOiAvW1xcdTAwNTlcXHUyNENFXFx1RkYzOVxcdTFFRjJcXHUwMEREXFx1MDE3NlxcdTFFRjhcXHUwMjMyXFx1MUU4RVxcdTAxNzhcXHUxRUY2XFx1MUVGNFxcdTAxQjNcXHUwMjRFXFx1MUVGRV0vZyB9LCB7ICdiYXNlJzogJ1onLCAnbGV0dGVycyc6IC9bXFx1MDA1QVxcdTI0Q0ZcXHVGRjNBXFx1MDE3OVxcdTFFOTBcXHUwMTdCXFx1MDE3RFxcdTFFOTJcXHUxRTk0XFx1MDFCNVxcdTAyMjRcXHUyQzdGXFx1MkM2QlxcdUE3NjJdL2cgfSwgeyAnYmFzZSc6ICdhJywgJ2xldHRlcnMnOiAvW1xcdTAwNjFcXHUyNEQwXFx1RkY0MVxcdTFFOUFcXHUwMEUwXFx1MDBFMVxcdTAwRTJcXHUxRUE3XFx1MUVBNVxcdTFFQUJcXHUxRUE5XFx1MDBFM1xcdTAxMDFcXHUwMTAzXFx1MUVCMVxcdTFFQUZcXHUxRUI1XFx1MUVCM1xcdTAyMjdcXHUwMUUxXFx1MDBFNFxcdTAxREZcXHUxRUEzXFx1MDBFNVxcdTAxRkJcXHUwMUNFXFx1MDIwMVxcdTAyMDNcXHUxRUExXFx1MUVBRFxcdTFFQjdcXHUxRTAxXFx1MDEwNVxcdTJDNjVcXHUwMjUwXS9nIH0sIHsgJ2Jhc2UnOiAnYWEnLCAnbGV0dGVycyc6IC9bXFx1QTczM10vZyB9LCB7ICdiYXNlJzogJ2FlJywgJ2xldHRlcnMnOiAvW1xcdTAwRTZcXHUwMUZEXFx1MDFFM10vZyB9LCB7ICdiYXNlJzogJ2FvJywgJ2xldHRlcnMnOiAvW1xcdUE3MzVdL2cgfSwgeyAnYmFzZSc6ICdhdScsICdsZXR0ZXJzJzogL1tcXHVBNzM3XS9nIH0sIHsgJ2Jhc2UnOiAnYXYnLCAnbGV0dGVycyc6IC9bXFx1QTczOVxcdUE3M0JdL2cgfSwgeyAnYmFzZSc6ICdheScsICdsZXR0ZXJzJzogL1tcXHVBNzNEXS9nIH0sIHsgJ2Jhc2UnOiAnYicsICdsZXR0ZXJzJzogL1tcXHUwMDYyXFx1MjREMVxcdUZGNDJcXHUxRTAzXFx1MUUwNVxcdTFFMDdcXHUwMTgwXFx1MDE4M1xcdTAyNTNdL2cgfSwgeyAnYmFzZSc6ICdjJywgJ2xldHRlcnMnOiAvW1xcdTAwNjNcXHUyNEQyXFx1RkY0M1xcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHUwMEU3XFx1MUUwOVxcdTAxODhcXHUwMjNDXFx1QTczRlxcdTIxODRdL2cgfSwgeyAnYmFzZSc6ICdkJywgJ2xldHRlcnMnOiAvW1xcdTAwNjRcXHUyNEQzXFx1RkY0NFxcdTFFMEJcXHUwMTBGXFx1MUUwRFxcdTFFMTFcXHUxRTEzXFx1MUUwRlxcdTAxMTFcXHUwMThDXFx1MDI1NlxcdTAyNTdcXHVBNzdBXS9nIH0sIHsgJ2Jhc2UnOiAnZHonLCAnbGV0dGVycyc6IC9bXFx1MDFGM1xcdTAxQzZdL2cgfSwgeyAnYmFzZSc6ICdlJywgJ2xldHRlcnMnOiAvW1xcdTAwNjVcXHUyNEQ0XFx1RkY0NVxcdTAwRThcXHUwMEU5XFx1MDBFQVxcdTFFQzFcXHUxRUJGXFx1MUVDNVxcdTFFQzNcXHUxRUJEXFx1MDExM1xcdTFFMTVcXHUxRTE3XFx1MDExNVxcdTAxMTdcXHUwMEVCXFx1MUVCQlxcdTAxMUJcXHUwMjA1XFx1MDIwN1xcdTFFQjlcXHUxRUM3XFx1MDIyOVxcdTFFMURcXHUwMTE5XFx1MUUxOVxcdTFFMUJcXHUwMjQ3XFx1MDI1QlxcdTAxRERdL2cgfSwgeyAnYmFzZSc6ICdmJywgJ2xldHRlcnMnOiAvW1xcdTAwNjZcXHUyNEQ1XFx1RkY0NlxcdTFFMUZcXHUwMTkyXFx1QTc3Q10vZyB9LCB7ICdiYXNlJzogJ2cnLCAnbGV0dGVycyc6IC9bXFx1MDA2N1xcdTI0RDZcXHVGRjQ3XFx1MDFGNVxcdTAxMURcXHUxRTIxXFx1MDExRlxcdTAxMjFcXHUwMUU3XFx1MDEyM1xcdTAxRTVcXHUwMjYwXFx1QTdBMVxcdTFENzlcXHVBNzdGXS9nIH0sIHsgJ2Jhc2UnOiAnaCcsICdsZXR0ZXJzJzogL1tcXHUwMDY4XFx1MjREN1xcdUZGNDhcXHUwMTI1XFx1MUUyM1xcdTFFMjdcXHUwMjFGXFx1MUUyNVxcdTFFMjlcXHUxRTJCXFx1MUU5NlxcdTAxMjdcXHUyQzY4XFx1MkM3NlxcdTAyNjVdL2cgfSwgeyAnYmFzZSc6ICdodicsICdsZXR0ZXJzJzogL1tcXHUwMTk1XS9nIH0sIHsgJ2Jhc2UnOiAnaScsICdsZXR0ZXJzJzogL1tcXHUwMDY5XFx1MjREOFxcdUZGNDlcXHUwMEVDXFx1MDBFRFxcdTAwRUVcXHUwMTI5XFx1MDEyQlxcdTAxMkRcXHUwMEVGXFx1MUUyRlxcdTFFQzlcXHUwMUQwXFx1MDIwOVxcdTAyMEJcXHUxRUNCXFx1MDEyRlxcdTFFMkRcXHUwMjY4XFx1MDEzMV0vZyB9LCB7ICdiYXNlJzogJ2onLCAnbGV0dGVycyc6IC9bXFx1MDA2QVxcdTI0RDlcXHVGRjRBXFx1MDEzNVxcdTAxRjBcXHUwMjQ5XS9nIH0sIHsgJ2Jhc2UnOiAnaycsICdsZXR0ZXJzJzogL1tcXHUwMDZCXFx1MjREQVxcdUZGNEJcXHUxRTMxXFx1MDFFOVxcdTFFMzNcXHUwMTM3XFx1MUUzNVxcdTAxOTlcXHUyQzZBXFx1QTc0MVxcdUE3NDNcXHVBNzQ1XFx1QTdBM10vZyB9LCB7ICdiYXNlJzogJ2wnLCAnbGV0dGVycyc6IC9bXFx1MDA2Q1xcdTI0REJcXHVGRjRDXFx1MDE0MFxcdTAxM0FcXHUwMTNFXFx1MUUzN1xcdTFFMzlcXHUwMTNDXFx1MUUzRFxcdTFFM0JcXHUwMTdGXFx1MDE0MlxcdTAxOUFcXHUwMjZCXFx1MkM2MVxcdUE3NDlcXHVBNzgxXFx1QTc0N10vZyB9LCB7ICdiYXNlJzogJ2xqJywgJ2xldHRlcnMnOiAvW1xcdTAxQzldL2cgfSwgeyAnYmFzZSc6ICdtJywgJ2xldHRlcnMnOiAvW1xcdTAwNkRcXHUyNERDXFx1RkY0RFxcdTFFM0ZcXHUxRTQxXFx1MUU0M1xcdTAyNzFcXHUwMjZGXS9nIH0sIHsgJ2Jhc2UnOiAnbicsICdsZXR0ZXJzJzogL1tcXHUwMDZFXFx1MjRERFxcdUZGNEVcXHUwMUY5XFx1MDE0NFxcdTAwRjFcXHUxRTQ1XFx1MDE0OFxcdTFFNDdcXHUwMTQ2XFx1MUU0QlxcdTFFNDlcXHUwMTlFXFx1MDI3MlxcdTAxNDlcXHVBNzkxXFx1QTdBNV0vZyB9LCB7ICdiYXNlJzogJ25qJywgJ2xldHRlcnMnOiAvW1xcdTAxQ0NdL2cgfSwgeyAnYmFzZSc6ICdvJywgJ2xldHRlcnMnOiAvW1xcdTAwNkZcXHUyNERFXFx1RkY0RlxcdTAwRjJcXHUwMEYzXFx1MDBGNFxcdTFFRDNcXHUxRUQxXFx1MUVEN1xcdTFFRDVcXHUwMEY1XFx1MUU0RFxcdTAyMkRcXHUxRTRGXFx1MDE0RFxcdTFFNTFcXHUxRTUzXFx1MDE0RlxcdTAyMkZcXHUwMjMxXFx1MDBGNlxcdTAyMkJcXHUxRUNGXFx1MDE1MVxcdTAxRDJcXHUwMjBEXFx1MDIwRlxcdTAxQTFcXHUxRUREXFx1MUVEQlxcdTFFRTFcXHUxRURGXFx1MUVFM1xcdTFFQ0RcXHUxRUQ5XFx1MDFFQlxcdTAxRURcXHUwMEY4XFx1MDFGRlxcdTAyNTRcXHVBNzRCXFx1QTc0RFxcdTAyNzVdL2cgfSwgeyAnYmFzZSc6ICdvaScsICdsZXR0ZXJzJzogL1tcXHUwMUEzXS9nIH0sIHsgJ2Jhc2UnOiAnb3UnLCAnbGV0dGVycyc6IC9bXFx1MDIyM10vZyB9LCB7ICdiYXNlJzogJ29vJywgJ2xldHRlcnMnOiAvW1xcdUE3NEZdL2cgfSwgeyAnYmFzZSc6ICdwJywgJ2xldHRlcnMnOiAvW1xcdTAwNzBcXHUyNERGXFx1RkY1MFxcdTFFNTVcXHUxRTU3XFx1MDFBNVxcdTFEN0RcXHVBNzUxXFx1QTc1M1xcdUE3NTVdL2cgfSwgeyAnYmFzZSc6ICdxJywgJ2xldHRlcnMnOiAvW1xcdTAwNzFcXHUyNEUwXFx1RkY1MVxcdTAyNEJcXHVBNzU3XFx1QTc1OV0vZyB9LCB7ICdiYXNlJzogJ3InLCAnbGV0dGVycyc6IC9bXFx1MDA3MlxcdTI0RTFcXHVGRjUyXFx1MDE1NVxcdTFFNTlcXHUwMTU5XFx1MDIxMVxcdTAyMTNcXHUxRTVCXFx1MUU1RFxcdTAxNTdcXHUxRTVGXFx1MDI0RFxcdTAyN0RcXHVBNzVCXFx1QTdBN1xcdUE3ODNdL2cgfSwgeyAnYmFzZSc6ICdzJywgJ2xldHRlcnMnOiAvW1xcdTAwNzNcXHUyNEUyXFx1RkY1M1xcdTAwREZcXHUwMTVCXFx1MUU2NVxcdTAxNURcXHUxRTYxXFx1MDE2MVxcdTFFNjdcXHUxRTYzXFx1MUU2OVxcdTAyMTlcXHUwMTVGXFx1MDIzRlxcdUE3QTlcXHVBNzg1XFx1MUU5Ql0vZyB9LCB7ICdiYXNlJzogJ3QnLCAnbGV0dGVycyc6IC9bXFx1MDA3NFxcdTI0RTNcXHVGRjU0XFx1MUU2QlxcdTFFOTdcXHUwMTY1XFx1MUU2RFxcdTAyMUJcXHUwMTYzXFx1MUU3MVxcdTFFNkZcXHUwMTY3XFx1MDFBRFxcdTAyODhcXHUyQzY2XFx1QTc4N10vZyB9LCB7ICdiYXNlJzogJ3R6JywgJ2xldHRlcnMnOiAvW1xcdUE3MjldL2cgfSwgeyAnYmFzZSc6ICd1JywgJ2xldHRlcnMnOiAvW1xcdTAwNzVcXHUyNEU0XFx1RkY1NVxcdTAwRjlcXHUwMEZBXFx1MDBGQlxcdTAxNjlcXHUxRTc5XFx1MDE2QlxcdTFFN0JcXHUwMTZEXFx1MDBGQ1xcdTAxRENcXHUwMUQ4XFx1MDFENlxcdTAxREFcXHUxRUU3XFx1MDE2RlxcdTAxNzFcXHUwMUQ0XFx1MDIxNVxcdTAyMTdcXHUwMUIwXFx1MUVFQlxcdTFFRTlcXHUxRUVGXFx1MUVFRFxcdTFFRjFcXHUxRUU1XFx1MUU3M1xcdTAxNzNcXHUxRTc3XFx1MUU3NVxcdTAyODldL2cgfSwgeyAnYmFzZSc6ICd2JywgJ2xldHRlcnMnOiAvW1xcdTAwNzZcXHUyNEU1XFx1RkY1NlxcdTFFN0RcXHUxRTdGXFx1MDI4QlxcdUE3NUZcXHUwMjhDXS9nIH0sIHsgJ2Jhc2UnOiAndnknLCAnbGV0dGVycyc6IC9bXFx1QTc2MV0vZyB9LCB7ICdiYXNlJzogJ3cnLCAnbGV0dGVycyc6IC9bXFx1MDA3N1xcdTI0RTZcXHVGRjU3XFx1MUU4MVxcdTFFODNcXHUwMTc1XFx1MUU4N1xcdTFFODVcXHUxRTk4XFx1MUU4OVxcdTJDNzNdL2cgfSwgeyAnYmFzZSc6ICd4JywgJ2xldHRlcnMnOiAvW1xcdTAwNzhcXHUyNEU3XFx1RkY1OFxcdTFFOEJcXHUxRThEXS9nIH0sIHsgJ2Jhc2UnOiAneScsICdsZXR0ZXJzJzogL1tcXHUwMDc5XFx1MjRFOFxcdUZGNTlcXHUxRUYzXFx1MDBGRFxcdTAxNzdcXHUxRUY5XFx1MDIzM1xcdTFFOEZcXHUwMEZGXFx1MUVGN1xcdTFFOTlcXHUxRUY1XFx1MDFCNFxcdTAyNEZcXHUxRUZGXS9nIH0sIHsgJ2Jhc2UnOiAneicsICdsZXR0ZXJzJzogL1tcXHUwMDdBXFx1MjRFOVxcdUZGNUFcXHUwMTdBXFx1MUU5MVxcdTAxN0NcXHUwMTdFXFx1MUU5M1xcdTFFOTVcXHUwMUI2XFx1MDIyNVxcdTAyNDBcXHUyQzZDXFx1QTc2M10vZyB9XTtcblxudmFyIHN0cmlwRGlhY3JpdGljcyA9IGZ1bmN0aW9uIHN0cmlwRGlhY3JpdGljcyhzdHIpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpKyspIHtcblx0XHRzdHIgPSBzdHIucmVwbGFjZShtYXBbaV0ubGV0dGVycywgbWFwW2ldLmJhc2UpO1xuXHR9XG5cdHJldHVybiBzdHI7XG59O1xuXG52YXIgdHJpbSA9IGZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufTtcblxudmFyIGlzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJztcbn07XG5cbnZhciBmaWx0ZXJPcHRpb25zID0gZnVuY3Rpb24gZmlsdGVyT3B0aW9ucyhvcHRpb25zLCBmaWx0ZXJWYWx1ZSwgZXhjbHVkZU9wdGlvbnMsIHByb3BzKSB7XG5cdGlmIChwcm9wcy5pZ25vcmVBY2NlbnRzKSB7XG5cdFx0ZmlsdGVyVmFsdWUgPSBzdHJpcERpYWNyaXRpY3MoZmlsdGVyVmFsdWUpO1xuXHR9XG5cblx0aWYgKHByb3BzLmlnbm9yZUNhc2UpIHtcblx0XHRmaWx0ZXJWYWx1ZSA9IGZpbHRlclZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRpZiAocHJvcHMudHJpbUZpbHRlcikge1xuXHRcdGZpbHRlclZhbHVlID0gdHJpbShmaWx0ZXJWYWx1ZSk7XG5cdH1cblxuXHRpZiAoZXhjbHVkZU9wdGlvbnMpIGV4Y2x1ZGVPcHRpb25zID0gZXhjbHVkZU9wdGlvbnMubWFwKGZ1bmN0aW9uIChpKSB7XG5cdFx0cmV0dXJuIGlbcHJvcHMudmFsdWVLZXldO1xuXHR9KTtcblxuXHRyZXR1cm4gb3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuXHRcdGlmIChleGNsdWRlT3B0aW9ucyAmJiBleGNsdWRlT3B0aW9ucy5pbmRleE9mKG9wdGlvbltwcm9wcy52YWx1ZUtleV0pID4gLTEpIHJldHVybiBmYWxzZTtcblx0XHRpZiAocHJvcHMuZmlsdGVyT3B0aW9uKSByZXR1cm4gcHJvcHMuZmlsdGVyT3B0aW9uLmNhbGwodW5kZWZpbmVkLCBvcHRpb24sIGZpbHRlclZhbHVlKTtcblx0XHRpZiAoIWZpbHRlclZhbHVlKSByZXR1cm4gdHJ1ZTtcblxuXHRcdHZhciB2YWx1ZSA9IG9wdGlvbltwcm9wcy52YWx1ZUtleV07XG5cdFx0dmFyIGxhYmVsID0gb3B0aW9uW3Byb3BzLmxhYmVsS2V5XTtcblx0XHR2YXIgaGFzVmFsdWUgPSBpc1ZhbGlkKHZhbHVlKTtcblx0XHR2YXIgaGFzTGFiZWwgPSBpc1ZhbGlkKGxhYmVsKTtcblxuXHRcdGlmICghaGFzVmFsdWUgJiYgIWhhc0xhYmVsKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIHZhbHVlVGVzdCA9IGhhc1ZhbHVlID8gU3RyaW5nKHZhbHVlKSA6IG51bGw7XG5cdFx0dmFyIGxhYmVsVGVzdCA9IGhhc0xhYmVsID8gU3RyaW5nKGxhYmVsKSA6IG51bGw7XG5cblx0XHRpZiAocHJvcHMuaWdub3JlQWNjZW50cykge1xuXHRcdFx0aWYgKHZhbHVlVGVzdCAmJiBwcm9wcy5tYXRjaFByb3AgIT09ICdsYWJlbCcpIHZhbHVlVGVzdCA9IHN0cmlwRGlhY3JpdGljcyh2YWx1ZVRlc3QpO1xuXHRcdFx0aWYgKGxhYmVsVGVzdCAmJiBwcm9wcy5tYXRjaFByb3AgIT09ICd2YWx1ZScpIGxhYmVsVGVzdCA9IHN0cmlwRGlhY3JpdGljcyhsYWJlbFRlc3QpO1xuXHRcdH1cblxuXHRcdGlmIChwcm9wcy5pZ25vcmVDYXNlKSB7XG5cdFx0XHRpZiAodmFsdWVUZXN0ICYmIHByb3BzLm1hdGNoUHJvcCAhPT0gJ2xhYmVsJykgdmFsdWVUZXN0ID0gdmFsdWVUZXN0LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRpZiAobGFiZWxUZXN0ICYmIHByb3BzLm1hdGNoUHJvcCAhPT0gJ3ZhbHVlJykgbGFiZWxUZXN0ID0gbGFiZWxUZXN0LnRvTG93ZXJDYXNlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb3BzLm1hdGNoUG9zID09PSAnc3RhcnQnID8gdmFsdWVUZXN0ICYmIHByb3BzLm1hdGNoUHJvcCAhPT0gJ2xhYmVsJyAmJiB2YWx1ZVRlc3Quc3Vic3RyKDAsIGZpbHRlclZhbHVlLmxlbmd0aCkgPT09IGZpbHRlclZhbHVlIHx8IGxhYmVsVGVzdCAmJiBwcm9wcy5tYXRjaFByb3AgIT09ICd2YWx1ZScgJiYgbGFiZWxUZXN0LnN1YnN0cigwLCBmaWx0ZXJWYWx1ZS5sZW5ndGgpID09PSBmaWx0ZXJWYWx1ZSA6IHZhbHVlVGVzdCAmJiBwcm9wcy5tYXRjaFByb3AgIT09ICdsYWJlbCcgJiYgdmFsdWVUZXN0LmluZGV4T2YoZmlsdGVyVmFsdWUpID49IDAgfHwgbGFiZWxUZXN0ICYmIHByb3BzLm1hdGNoUHJvcCAhPT0gJ3ZhbHVlJyAmJiBsYWJlbFRlc3QuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPj0gMDtcblx0fSk7XG59O1xuXG52YXIgbWVudVJlbmRlcmVyID0gZnVuY3Rpb24gbWVudVJlbmRlcmVyKF9yZWYpIHtcblx0dmFyIGZvY3VzZWRPcHRpb24gPSBfcmVmLmZvY3VzZWRPcHRpb24sXG5cdCAgICBmb2N1c09wdGlvbiA9IF9yZWYuZm9jdXNPcHRpb24sXG5cdCAgICBpbnB1dFZhbHVlID0gX3JlZi5pbnB1dFZhbHVlLFxuXHQgICAgaW5zdGFuY2VQcmVmaXggPSBfcmVmLmluc3RhbmNlUHJlZml4LFxuXHQgICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cyxcblx0ICAgIG9uT3B0aW9uUmVmID0gX3JlZi5vbk9wdGlvblJlZixcblx0ICAgIG9uU2VsZWN0ID0gX3JlZi5vblNlbGVjdCxcblx0ICAgIG9wdGlvbkNsYXNzTmFtZSA9IF9yZWYub3B0aW9uQ2xhc3NOYW1lLFxuXHQgICAgb3B0aW9uQ29tcG9uZW50ID0gX3JlZi5vcHRpb25Db21wb25lbnQsXG5cdCAgICBvcHRpb25SZW5kZXJlciA9IF9yZWYub3B0aW9uUmVuZGVyZXIsXG5cdCAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuXHQgICAgcmVtb3ZlVmFsdWUgPSBfcmVmLnJlbW92ZVZhbHVlLFxuXHQgICAgc2VsZWN0VmFsdWUgPSBfcmVmLnNlbGVjdFZhbHVlLFxuXHQgICAgdmFsdWVBcnJheSA9IF9yZWYudmFsdWVBcnJheSxcblx0ICAgIHZhbHVlS2V5ID0gX3JlZi52YWx1ZUtleTtcblxuXHR2YXIgT3B0aW9uID0gb3B0aW9uQ29tcG9uZW50O1xuXG5cdHJldHVybiBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uLCBpKSB7XG5cdFx0dmFyIGlzU2VsZWN0ZWQgPSB2YWx1ZUFycmF5ICYmIHZhbHVlQXJyYXkuc29tZShmdW5jdGlvbiAoeCkge1xuXHRcdFx0cmV0dXJuIHhbdmFsdWVLZXldID09PSBvcHRpb25bdmFsdWVLZXldO1xuXHRcdH0pO1xuXHRcdHZhciBpc0ZvY3VzZWQgPSBvcHRpb24gPT09IGZvY3VzZWRPcHRpb247XG5cdFx0dmFyIG9wdGlvbkNsYXNzID0gY2xhc3NOYW1lcyhvcHRpb25DbGFzc05hbWUsIHtcblx0XHRcdCdTZWxlY3Qtb3B0aW9uJzogdHJ1ZSxcblx0XHRcdCdpcy1zZWxlY3RlZCc6IGlzU2VsZWN0ZWQsXG5cdFx0XHQnaXMtZm9jdXNlZCc6IGlzRm9jdXNlZCxcblx0XHRcdCdpcy1kaXNhYmxlZCc6IG9wdGlvbi5kaXNhYmxlZFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRPcHRpb24sXG5cdFx0XHR7XG5cdFx0XHRcdGNsYXNzTmFtZTogb3B0aW9uQ2xhc3MsXG5cdFx0XHRcdGZvY3VzT3B0aW9uOiBmb2N1c09wdGlvbixcblx0XHRcdFx0aW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcblx0XHRcdFx0aW5zdGFuY2VQcmVmaXg6IGluc3RhbmNlUHJlZml4LFxuXHRcdFx0XHRpc0Rpc2FibGVkOiBvcHRpb24uZGlzYWJsZWQsXG5cdFx0XHRcdGlzRm9jdXNlZDogaXNGb2N1c2VkLFxuXHRcdFx0XHRpc1NlbGVjdGVkOiBpc1NlbGVjdGVkLFxuXHRcdFx0XHRrZXk6ICdvcHRpb24tJyArIGkgKyAnLScgKyBvcHRpb25bdmFsdWVLZXldLFxuXHRcdFx0XHRvbkZvY3VzOiBvbkZvY3VzLFxuXHRcdFx0XHRvblNlbGVjdDogb25TZWxlY3QsXG5cdFx0XHRcdG9wdGlvbjogb3B0aW9uLFxuXHRcdFx0XHRvcHRpb25JbmRleDogaSxcblx0XHRcdFx0cmVmOiBmdW5jdGlvbiByZWYoX3JlZjIpIHtcblx0XHRcdFx0XHRvbk9wdGlvblJlZihfcmVmMiwgaXNGb2N1c2VkKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVtb3ZlVmFsdWU6IHJlbW92ZVZhbHVlLFxuXHRcdFx0XHRzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWVcblx0XHRcdH0sXG5cdFx0XHRvcHRpb25SZW5kZXJlcihvcHRpb24sIGksIGlucHV0VmFsdWUpXG5cdFx0KTtcblx0fSk7XG59O1xuXG5tZW51UmVuZGVyZXIucHJvcFR5cGVzID0ge1xuXHRmb2N1c09wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG5cdGZvY3VzZWRPcHRpb246IFByb3BUeXBlcy5vYmplY3QsXG5cdGlucHV0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdGluc3RhbmNlUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuXHRvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcblx0b25PcHRpb25SZWY6IFByb3BUeXBlcy5mdW5jLFxuXHRvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMsXG5cdG9wdGlvbkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblx0b3B0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZnVuYyxcblx0b3B0aW9uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuXHRvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG5cdHJlbW92ZVZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcblx0c2VsZWN0VmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuXHR2YWx1ZUFycmF5OiBQcm9wVHlwZXMuYXJyYXksXG5cdHZhbHVlS2V5OiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG52YXIgYmxvY2tFdmVudCA9IChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdGlmIChldmVudC50YXJnZXQudGFnTmFtZSAhPT0gJ0EnIHx8ICEoJ2hyZWYnIGluIGV2ZW50LnRhcmdldCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKGV2ZW50LnRhcmdldC50YXJnZXQpIHtcblx0XHR3aW5kb3cub3BlbihldmVudC50YXJnZXQuaHJlZiwgZXZlbnQudGFyZ2V0LnRhcmdldCk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSBldmVudC50YXJnZXQuaHJlZjtcblx0fVxufSk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuXG5cblxuXG5cbnZhciBhc3luY0dlbmVyYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQXdhaXRWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEFzeW5jR2VuZXJhdG9yKGdlbikge1xuICAgIHZhciBmcm9udCwgYmFjaztcblxuICAgIGZ1bmN0aW9uIHNlbmQoa2V5LCBhcmcpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZXF1ZXN0ID0ge1xuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIGFyZzogYXJnLFxuICAgICAgICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgcmVqZWN0OiByZWplY3QsXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChiYWNrKSB7XG4gICAgICAgICAgYmFjayA9IGJhY2submV4dCA9IHJlcXVlc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnJvbnQgPSBiYWNrID0gcmVxdWVzdDtcbiAgICAgICAgICByZXN1bWUoa2V5LCBhcmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXN1bWUoa2V5LCBhcmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBnZW5ba2V5XShhcmcpO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXdhaXRWYWx1ZSkge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZS52YWx1ZSkudGhlbihmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXN1bWUoXCJuZXh0XCIsIGFyZyk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmVzdW1lKFwidGhyb3dcIiwgYXJnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXR0bGUocmVzdWx0LmRvbmUgPyBcInJldHVyblwiIDogXCJub3JtYWxcIiwgcmVzdWx0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHNldHRsZShcInRocm93XCIsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0dGxlKHR5cGUsIHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcInJldHVyblwiOlxuICAgICAgICAgIGZyb250LnJlc29sdmUoe1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJ0aHJvd1wiOlxuICAgICAgICAgIGZyb250LnJlamVjdCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBmcm9udC5yZXNvbHZlKHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGZyb250ID0gZnJvbnQubmV4dDtcblxuICAgICAgaWYgKGZyb250KSB7XG4gICAgICAgIHJlc3VtZShmcm9udC5rZXksIGZyb250LmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYWNrID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pbnZva2UgPSBzZW5kO1xuXG4gICAgaWYgKHR5cGVvZiBnZW4ucmV0dXJuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMucmV0dXJuID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHtcbiAgICBBc3luY0dlbmVyYXRvci5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgfVxuXG4gIEFzeW5jR2VuZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKGFyZykge1xuICAgIHJldHVybiB0aGlzLl9pbnZva2UoXCJuZXh0XCIsIGFyZyk7XG4gIH07XG5cbiAgQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLnRocm93ID0gZnVuY3Rpb24gKGFyZykge1xuICAgIHJldHVybiB0aGlzLl9pbnZva2UoXCJ0aHJvd1wiLCBhcmcpO1xuICB9O1xuXG4gIEFzeW5jR2VuZXJhdG9yLnByb3RvdHlwZS5yZXR1cm4gPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZShcInJldHVyblwiLCBhcmcpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgd3JhcDogZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFzeW5jR2VuZXJhdG9yKGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICAgICAgfTtcbiAgICB9LFxuICAgIGF3YWl0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgQXdhaXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9O1xufSgpO1xuXG5cblxuXG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cblxuXG5cblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxuXG5cbnZhciBpbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07XG5cblxuXG5cblxuXG5cblxuXG52YXIgb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqLCBrZXlzKSB7XG4gIHZhciB0YXJnZXQgPSB7fTtcblxuICBmb3IgKHZhciBpIGluIG9iaikge1xuICAgIGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7XG4gICAgdGFyZ2V0W2ldID0gb2JqW2ldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG52YXIgT3B0aW9uID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcblx0aW5oZXJpdHMoT3B0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBPcHRpb24ocHJvcHMpIHtcblx0XHRjbGFzc0NhbGxDaGVjayh0aGlzLCBPcHRpb24pO1xuXG5cdFx0dmFyIF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoT3B0aW9uLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT3B0aW9uKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG5cdFx0X3RoaXMuaGFuZGxlTW91c2VEb3duID0gX3RoaXMuaGFuZGxlTW91c2VEb3duLmJpbmQoX3RoaXMpO1xuXHRcdF90aGlzLmhhbmRsZU1vdXNlRW50ZXIgPSBfdGhpcy5oYW5kbGVNb3VzZUVudGVyLmJpbmQoX3RoaXMpO1xuXHRcdF90aGlzLmhhbmRsZU1vdXNlTW92ZSA9IF90aGlzLmhhbmRsZU1vdXNlTW92ZS5iaW5kKF90aGlzKTtcblx0XHRfdGhpcy5oYW5kbGVUb3VjaFN0YXJ0ID0gX3RoaXMuaGFuZGxlVG91Y2hTdGFydC5iaW5kKF90aGlzKTtcblx0XHRfdGhpcy5oYW5kbGVUb3VjaEVuZCA9IF90aGlzLmhhbmRsZVRvdWNoRW5kLmJpbmQoX3RoaXMpO1xuXHRcdF90aGlzLmhhbmRsZVRvdWNoTW92ZSA9IF90aGlzLmhhbmRsZVRvdWNoTW92ZS5iaW5kKF90aGlzKTtcblx0XHRfdGhpcy5vbkZvY3VzID0gX3RoaXMub25Gb2N1cy5iaW5kKF90aGlzKTtcblx0XHRyZXR1cm4gX3RoaXM7XG5cdH1cblxuXHRjcmVhdGVDbGFzcyhPcHRpb24sIFt7XG5cdFx0a2V5OiAnaGFuZGxlTW91c2VEb3duJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGV2ZW50KSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHR0aGlzLnByb3BzLm9uU2VsZWN0KHRoaXMucHJvcHMub3B0aW9uLCBldmVudCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlTW91c2VFbnRlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoZXZlbnQpIHtcblx0XHRcdHRoaXMub25Gb2N1cyhldmVudCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlTW91c2VNb3ZlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlKGV2ZW50KSB7XG5cdFx0XHR0aGlzLm9uRm9jdXMoZXZlbnQpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2hhbmRsZVRvdWNoRW5kJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVG91Y2hFbmQoZXZlbnQpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSB2aWV3IGlzIGJlaW5nIGRyYWdnZWQsIEluIHRoaXMgY2FzZVxuXHRcdFx0Ly8gd2UgZG9uJ3Qgd2FudCB0byBmaXJlIHRoZSBjbGljayBldmVudCAoYmVjYXVzZSB0aGUgdXNlciBvbmx5IHdhbnRzIHRvIHNjcm9sbClcblx0XHRcdGlmICh0aGlzLmRyYWdnaW5nKSByZXR1cm47XG5cblx0XHRcdHRoaXMuaGFuZGxlTW91c2VEb3duKGV2ZW50KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdoYW5kbGVUb3VjaE1vdmUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVUb3VjaE1vdmUoKSB7XG5cdFx0XHQvLyBTZXQgYSBmbGFnIHRoYXQgdGhlIHZpZXcgaXMgYmVpbmcgZHJhZ2dlZFxuXHRcdFx0dGhpcy5kcmFnZ2luZyA9IHRydWU7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlVG91Y2hTdGFydCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGhhbmRsZVRvdWNoU3RhcnQoKSB7XG5cdFx0XHQvLyBTZXQgYSBmbGFnIHRoYXQgdGhlIHZpZXcgaXMgbm90IGJlaW5nIGRyYWdnZWRcblx0XHRcdHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdvbkZvY3VzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gb25Gb2N1cyhldmVudCkge1xuXHRcdFx0aWYgKCF0aGlzLnByb3BzLmlzRm9jdXNlZCkge1xuXHRcdFx0XHR0aGlzLnByb3BzLm9uRm9jdXModGhpcy5wcm9wcy5vcHRpb24sIGV2ZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFx0XHR2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcblx0XHRcdCAgICBvcHRpb24gPSBfcHJvcHMub3B0aW9uLFxuXHRcdFx0ICAgIGluc3RhbmNlUHJlZml4ID0gX3Byb3BzLmluc3RhbmNlUHJlZml4LFxuXHRcdFx0ICAgIG9wdGlvbkluZGV4ID0gX3Byb3BzLm9wdGlvbkluZGV4O1xuXG5cdFx0XHR2YXIgY2xhc3NOYW1lID0gY2xhc3NOYW1lcyh0aGlzLnByb3BzLmNsYXNzTmFtZSwgb3B0aW9uLmNsYXNzTmFtZSk7XG5cblx0XHRcdHJldHVybiBvcHRpb24uZGlzYWJsZWQgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0eyBjbGFzc05hbWU6IGNsYXNzTmFtZSxcblx0XHRcdFx0XHRvbk1vdXNlRG93bjogYmxvY2tFdmVudCxcblx0XHRcdFx0XHRvbkNsaWNrOiBibG9ja0V2ZW50IH0sXG5cdFx0XHRcdHRoaXMucHJvcHMuY2hpbGRyZW5cblx0XHRcdCkgOiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0eyBjbGFzc05hbWU6IGNsYXNzTmFtZSxcblx0XHRcdFx0XHRzdHlsZTogb3B0aW9uLnN0eWxlLFxuXHRcdFx0XHRcdHJvbGU6ICdvcHRpb24nLFxuXHRcdFx0XHRcdCdhcmlhLWxhYmVsJzogb3B0aW9uLmxhYmVsLFxuXHRcdFx0XHRcdG9uTW91c2VEb3duOiB0aGlzLmhhbmRsZU1vdXNlRG93bixcblx0XHRcdFx0XHRvbk1vdXNlRW50ZXI6IHRoaXMuaGFuZGxlTW91c2VFbnRlcixcblx0XHRcdFx0XHRvbk1vdXNlTW92ZTogdGhpcy5oYW5kbGVNb3VzZU1vdmUsXG5cdFx0XHRcdFx0b25Ub3VjaFN0YXJ0OiB0aGlzLmhhbmRsZVRvdWNoU3RhcnQsXG5cdFx0XHRcdFx0b25Ub3VjaE1vdmU6IHRoaXMuaGFuZGxlVG91Y2hNb3ZlLFxuXHRcdFx0XHRcdG9uVG91Y2hFbmQ6IHRoaXMuaGFuZGxlVG91Y2hFbmQsXG5cdFx0XHRcdFx0aWQ6IGluc3RhbmNlUHJlZml4ICsgJy1vcHRpb24tJyArIG9wdGlvbkluZGV4LFxuXHRcdFx0XHRcdHRpdGxlOiBvcHRpb24udGl0bGUgfSxcblx0XHRcdFx0dGhpcy5wcm9wcy5jaGlsZHJlblxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblx0cmV0dXJuIE9wdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuT3B0aW9uLnByb3BUeXBlcyA9IHtcblx0Y2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXHRjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsIC8vIGNsYXNzTmFtZSAoYmFzZWQgb24gbW91c2UgcG9zaXRpb24pXG5cdGluc3RhbmNlUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIC8vIHVuaXF1ZSBwcmVmaXggZm9yIHRoZSBpZHMgKHVzZWQgZm9yIGFyaWEpXG5cdGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLCAvLyB0aGUgb3B0aW9uIGlzIGRpc2FibGVkXG5cdGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsIC8vIHRoZSBvcHRpb24gaXMgZm9jdXNlZFxuXHRpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCwgLy8gdGhlIG9wdGlvbiBpcyBzZWxlY3RlZFxuXHRvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYywgLy8gbWV0aG9kIHRvIGhhbmRsZSBtb3VzZUVudGVyIG9uIG9wdGlvbiBlbGVtZW50XG5cdG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYywgLy8gbWV0aG9kIHRvIGhhbmRsZSBjbGljayBvbiBvcHRpb24gZWxlbWVudFxuXHRvblVuZm9jdXM6IFByb3BUeXBlcy5mdW5jLCAvLyBtZXRob2QgdG8gaGFuZGxlIG1vdXNlTGVhdmUgb24gb3B0aW9uIGVsZW1lbnRcblx0b3B0aW9uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsIC8vIG9iamVjdCB0aGF0IGlzIGJhc2UgZm9yIHRoYXQgb3B0aW9uXG5cdG9wdGlvbkluZGV4OiBQcm9wVHlwZXMubnVtYmVyIC8vIGluZGV4IG9mIHRoZSBvcHRpb24sIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIGlkcyBmb3IgYXJpYVxufTtcblxudmFyIFZhbHVlID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcblx0aW5oZXJpdHMoVmFsdWUsIF9SZWFjdCRDb21wb25lbnQpO1xuXG5cdGZ1bmN0aW9uIFZhbHVlKHByb3BzKSB7XG5cdFx0Y2xhc3NDYWxsQ2hlY2sodGhpcywgVmFsdWUpO1xuXG5cdFx0dmFyIF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoVmFsdWUuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihWYWx1ZSkpLmNhbGwodGhpcywgcHJvcHMpKTtcblxuXHRcdF90aGlzLmhhbmRsZU1vdXNlRG93biA9IF90aGlzLmhhbmRsZU1vdXNlRG93bi5iaW5kKF90aGlzKTtcblx0XHRfdGhpcy5vblJlbW92ZSA9IF90aGlzLm9uUmVtb3ZlLmJpbmQoX3RoaXMpO1xuXHRcdF90aGlzLmhhbmRsZVRvdWNoRW5kUmVtb3ZlID0gX3RoaXMuaGFuZGxlVG91Y2hFbmRSZW1vdmUuYmluZChfdGhpcyk7XG5cdFx0X3RoaXMuaGFuZGxlVG91Y2hNb3ZlID0gX3RoaXMuaGFuZGxlVG91Y2hNb3ZlLmJpbmQoX3RoaXMpO1xuXHRcdF90aGlzLmhhbmRsZVRvdWNoU3RhcnQgPSBfdGhpcy5oYW5kbGVUb3VjaFN0YXJ0LmJpbmQoX3RoaXMpO1xuXHRcdHJldHVybiBfdGhpcztcblx0fVxuXG5cdGNyZWF0ZUNsYXNzKFZhbHVlLCBbe1xuXHRcdGtleTogJ2hhbmRsZU1vdXNlRG93bicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldmVudCkge1xuXHRcdFx0aWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5wcm9wcy52YWx1ZSwgZXZlbnQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5wcm9wcy52YWx1ZS5ocmVmKSB7XG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ29uUmVtb3ZlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gb25SZW1vdmUoZXZlbnQpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdHRoaXMucHJvcHMub25SZW1vdmUodGhpcy5wcm9wcy52YWx1ZSk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlVG91Y2hFbmRSZW1vdmUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVUb3VjaEVuZFJlbW92ZShldmVudCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIHZpZXcgaXMgYmVpbmcgZHJhZ2dlZCwgSW4gdGhpcyBjYXNlXG5cdFx0XHQvLyB3ZSBkb24ndCB3YW50IHRvIGZpcmUgdGhlIGNsaWNrIGV2ZW50IChiZWNhdXNlIHRoZSB1c2VyIG9ubHkgd2FudHMgdG8gc2Nyb2xsKVxuXHRcdFx0aWYgKHRoaXMuZHJhZ2dpbmcpIHJldHVybjtcblxuXHRcdFx0Ly8gRmlyZSB0aGUgbW91c2UgZXZlbnRzXG5cdFx0XHR0aGlzLm9uUmVtb3ZlKGV2ZW50KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdoYW5kbGVUb3VjaE1vdmUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVUb3VjaE1vdmUoKSB7XG5cdFx0XHQvLyBTZXQgYSBmbGFnIHRoYXQgdGhlIHZpZXcgaXMgYmVpbmcgZHJhZ2dlZFxuXHRcdFx0dGhpcy5kcmFnZ2luZyA9IHRydWU7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlVG91Y2hTdGFydCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGhhbmRsZVRvdWNoU3RhcnQoKSB7XG5cdFx0XHQvLyBTZXQgYSBmbGFnIHRoYXQgdGhlIHZpZXcgaXMgbm90IGJlaW5nIGRyYWdnZWRcblx0XHRcdHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXJSZW1vdmVJY29uJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyUmVtb3ZlSWNvbigpIHtcblx0XHRcdGlmICh0aGlzLnByb3BzLmRpc2FibGVkIHx8ICF0aGlzLnByb3BzLm9uUmVtb3ZlKSByZXR1cm47XG5cdFx0XHRyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J3NwYW4nLFxuXHRcdFx0XHR7IGNsYXNzTmFtZTogJ1NlbGVjdC12YWx1ZS1pY29uJyxcblx0XHRcdFx0XHQnYXJpYS1oaWRkZW4nOiAndHJ1ZScsXG5cdFx0XHRcdFx0b25Nb3VzZURvd246IHRoaXMub25SZW1vdmUsXG5cdFx0XHRcdFx0b25Ub3VjaEVuZDogdGhpcy5oYW5kbGVUb3VjaEVuZFJlbW92ZSxcblx0XHRcdFx0XHRvblRvdWNoU3RhcnQ6IHRoaXMuaGFuZGxlVG91Y2hTdGFydCxcblx0XHRcdFx0XHRvblRvdWNoTW92ZTogdGhpcy5oYW5kbGVUb3VjaE1vdmUgfSxcblx0XHRcdFx0J1xceEQ3J1xuXHRcdFx0KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXJMYWJlbCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlckxhYmVsKCkge1xuXHRcdFx0dmFyIGNsYXNzTmFtZSA9ICdTZWxlY3QtdmFsdWUtbGFiZWwnO1xuXHRcdFx0cmV0dXJuIHRoaXMucHJvcHMub25DbGljayB8fCB0aGlzLnByb3BzLnZhbHVlLmhyZWYgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHQnYScsXG5cdFx0XHRcdHsgY2xhc3NOYW1lOiBjbGFzc05hbWUsIGhyZWY6IHRoaXMucHJvcHMudmFsdWUuaHJlZiwgdGFyZ2V0OiB0aGlzLnByb3BzLnZhbHVlLnRhcmdldCwgb25Nb3VzZURvd246IHRoaXMuaGFuZGxlTW91c2VEb3duLCBvblRvdWNoRW5kOiB0aGlzLmhhbmRsZU1vdXNlRG93biB9LFxuXHRcdFx0XHR0aGlzLnByb3BzLmNoaWxkcmVuXG5cdFx0XHQpIDogUmVhY3QuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J3NwYW4nLFxuXHRcdFx0XHR7IGNsYXNzTmFtZTogY2xhc3NOYW1lLCByb2xlOiAnb3B0aW9uJywgJ2FyaWEtc2VsZWN0ZWQnOiAndHJ1ZScsIGlkOiB0aGlzLnByb3BzLmlkIH0sXG5cdFx0XHRcdHRoaXMucHJvcHMuY2hpbGRyZW5cblx0XHRcdCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHR7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnU2VsZWN0LXZhbHVlJywgdGhpcy5wcm9wcy52YWx1ZS5jbGFzc05hbWUpLFxuXHRcdFx0XHRcdHN0eWxlOiB0aGlzLnByb3BzLnZhbHVlLnN0eWxlLFxuXHRcdFx0XHRcdHRpdGxlOiB0aGlzLnByb3BzLnZhbHVlLnRpdGxlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMucmVuZGVyUmVtb3ZlSWNvbigpLFxuXHRcdFx0XHR0aGlzLnJlbmRlckxhYmVsKClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cdHJldHVybiBWYWx1ZTtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVmFsdWUucHJvcFR5cGVzID0ge1xuXHRjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cdGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCwgLy8gZGlzYWJsZWQgcHJvcCBwYXNzZWQgdG8gUmVhY3RTZWxlY3Rcblx0aWQ6IFByb3BUeXBlcy5zdHJpbmcsIC8vIFVuaXF1ZSBpZCBmb3IgdGhlIHZhbHVlIC0gdXNlZCBmb3IgYXJpYVxuXHRvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYywgLy8gbWV0aG9kIHRvIGhhbmRsZSBjbGljayBvbiB2YWx1ZSBsYWJlbFxuXHRvblJlbW92ZTogUHJvcFR5cGVzLmZ1bmMsIC8vIG1ldGhvZCB0byBoYW5kbGUgcmVtb3ZhbCBvZiB0aGUgdmFsdWVcblx0dmFsdWU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCAvLyB0aGUgb3B0aW9uIG9iamVjdCBmb3IgdGhpcyB2YWx1ZVxufTtcblxuLyohXG4gIENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9yZWFjdC1zZWxlY3RcbiovXG52YXIgc3RyaW5naWZ5VmFsdWUgPSBmdW5jdGlvbiBzdHJpbmdpZnlWYWx1ZSh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogdmFsdWUgIT09IG51bGwgJiYgSlNPTi5zdHJpbmdpZnkodmFsdWUpIHx8ICcnO1xufTtcblxudmFyIHN0cmluZ09yTm9kZSA9IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5ub2RlXSk7XG52YXIgc3RyaW5nT3JOdW1iZXIgPSBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSk7XG5cbnZhciBpbnN0YW5jZUlkID0gMTtcblxudmFyIHNob3VsZFNob3dWYWx1ZSA9IGZ1bmN0aW9uIHNob3VsZFNob3dWYWx1ZShzdGF0ZSwgcHJvcHMpIHtcblx0dmFyIGlucHV0VmFsdWUgPSBzdGF0ZS5pbnB1dFZhbHVlLFxuXHQgICAgaXNQc2V1ZG9Gb2N1c2VkID0gc3RhdGUuaXNQc2V1ZG9Gb2N1c2VkLFxuXHQgICAgaXNGb2N1c2VkID0gc3RhdGUuaXNGb2N1c2VkO1xuXHR2YXIgb25TZWxlY3RSZXNldHNJbnB1dCA9IHByb3BzLm9uU2VsZWN0UmVzZXRzSW5wdXQ7XG5cblxuXHRpZiAoIWlucHV0VmFsdWUpIHJldHVybiB0cnVlO1xuXG5cdGlmICghb25TZWxlY3RSZXNldHNJbnB1dCkge1xuXHRcdHJldHVybiAhKCFpc0ZvY3VzZWQgJiYgaXNQc2V1ZG9Gb2N1c2VkIHx8IGlzRm9jdXNlZCAmJiAhaXNQc2V1ZG9Gb2N1c2VkKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn07XG5cbnZhciBzaG91bGRTaG93UGxhY2Vob2xkZXIgPSBmdW5jdGlvbiBzaG91bGRTaG93UGxhY2Vob2xkZXIoc3RhdGUsIHByb3BzLCBpc09wZW4pIHtcblx0dmFyIGlucHV0VmFsdWUgPSBzdGF0ZS5pbnB1dFZhbHVlLFxuXHQgICAgaXNQc2V1ZG9Gb2N1c2VkID0gc3RhdGUuaXNQc2V1ZG9Gb2N1c2VkLFxuXHQgICAgaXNGb2N1c2VkID0gc3RhdGUuaXNGb2N1c2VkO1xuXHR2YXIgb25TZWxlY3RSZXNldHNJbnB1dCA9IHByb3BzLm9uU2VsZWN0UmVzZXRzSW5wdXQ7XG5cblxuXHRyZXR1cm4gIWlucHV0VmFsdWUgfHwgIW9uU2VsZWN0UmVzZXRzSW5wdXQgJiYgIWlzT3BlbiAmJiAhaXNQc2V1ZG9Gb2N1c2VkICYmICFpc0ZvY3VzZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIGEgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gb3B0aW9ucyBhbmQgdmFsdWVLZXlcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcnxBcnJheX0gdmFsdWVcdC0gdGhlIHNlbGVjdGVkIHZhbHVlKHMpXG4gKiBAcGFyYW0ge09iamVjdH1cdFx0IHByb3BzXHQtIHRoZSBTZWxlY3QgY29tcG9uZW50J3MgcHJvcHMgKG9yIG5leHRQcm9wcylcbiAqL1xudmFyIGV4cGFuZFZhbHVlID0gZnVuY3Rpb24gZXhwYW5kVmFsdWUodmFsdWUsIHByb3BzKSB7XG5cdHZhciB2YWx1ZVR5cGUgPSB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHZhbHVlKTtcblx0aWYgKHZhbHVlVHlwZSAhPT0gJ3N0cmluZycgJiYgdmFsdWVUeXBlICE9PSAnbnVtYmVyJyAmJiB2YWx1ZVR5cGUgIT09ICdib29sZWFuJykgcmV0dXJuIHZhbHVlO1xuXHR2YXIgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsXG5cdCAgICB2YWx1ZUtleSA9IHByb3BzLnZhbHVlS2V5O1xuXG5cdGlmICghb3B0aW9ucykgcmV0dXJuO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoU3RyaW5nKG9wdGlvbnNbaV1bdmFsdWVLZXldKSA9PT0gU3RyaW5nKHZhbHVlKSkgcmV0dXJuIG9wdGlvbnNbaV07XG5cdH1cbn07XG5cbnZhciBoYW5kbGVSZXF1aXJlZCA9IGZ1bmN0aW9uIGhhbmRsZVJlcXVpcmVkKHZhbHVlLCBtdWx0aSkge1xuXHRpZiAoIXZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0cmV0dXJuIG11bHRpID8gdmFsdWUubGVuZ3RoID09PSAwIDogT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbn07XG5cbnZhciBTZWxlY3QkMSA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG5cdGluaGVyaXRzKFNlbGVjdCwgX1JlYWN0JENvbXBvbmVudCk7XG5cblx0ZnVuY3Rpb24gU2VsZWN0KHByb3BzKSB7XG5cdFx0Y2xhc3NDYWxsQ2hlY2sodGhpcywgU2VsZWN0KTtcblxuXHRcdHZhciBfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFNlbGVjdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFNlbGVjdCkpLmNhbGwodGhpcywgcHJvcHMpKTtcblxuXHRcdFsnY2xlYXJWYWx1ZScsICdmb2N1c09wdGlvbicsICdnZXRPcHRpb25MYWJlbCcsICdoYW5kbGVJbnB1dEJsdXInLCAnaGFuZGxlSW5wdXRDaGFuZ2UnLCAnaGFuZGxlSW5wdXRGb2N1cycsICdoYW5kbGVJbnB1dFZhbHVlQ2hhbmdlJywgJ2hhbmRsZUtleURvd24nLCAnaGFuZGxlTWVudVNjcm9sbCcsICdoYW5kbGVNb3VzZURvd24nLCAnaGFuZGxlTW91c2VEb3duT25BcnJvdycsICdoYW5kbGVNb3VzZURvd25Pbk1lbnUnLCAnaGFuZGxlVG91Y2hFbmQnLCAnaGFuZGxlVG91Y2hFbmRDbGVhclZhbHVlJywgJ2hhbmRsZVRvdWNoTW92ZScsICdoYW5kbGVUb3VjaE91dHNpZGUnLCAnaGFuZGxlVG91Y2hTdGFydCcsICdoYW5kbGVWYWx1ZUNsaWNrJywgJ29uT3B0aW9uUmVmJywgJ3JlbW92ZVZhbHVlJywgJ3NlbGVjdFZhbHVlJ10uZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcblx0XHRcdHJldHVybiBfdGhpc1tmbl0gPSBfdGhpc1tmbl0uYmluZChfdGhpcyk7XG5cdFx0fSk7XG5cblx0XHRfdGhpcy5zdGF0ZSA9IHtcblx0XHRcdGlucHV0VmFsdWU6ICcnLFxuXHRcdFx0aXNGb2N1c2VkOiBmYWxzZSxcblx0XHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0XHRpc1BzZXVkb0ZvY3VzZWQ6IGZhbHNlLFxuXHRcdFx0cmVxdWlyZWQ6IGZhbHNlXG5cdFx0fTtcblx0XHRyZXR1cm4gX3RoaXM7XG5cdH1cblxuXHRjcmVhdGVDbGFzcyhTZWxlY3QsIFt7XG5cdFx0a2V5OiAnY29tcG9uZW50V2lsbE1vdW50Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2VQcmVmaXggPSAncmVhY3Qtc2VsZWN0LScgKyAodGhpcy5wcm9wcy5pbnN0YW5jZUlkIHx8ICsraW5zdGFuY2VJZCkgKyAnLSc7XG5cdFx0XHR2YXIgdmFsdWVBcnJheSA9IHRoaXMuZ2V0VmFsdWVBcnJheSh0aGlzLnByb3BzLnZhbHVlKTtcblxuXHRcdFx0aWYgKHRoaXMucHJvcHMucmVxdWlyZWQpIHtcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0cmVxdWlyZWQ6IGhhbmRsZVJlcXVpcmVkKHZhbHVlQXJyYXlbMF0sIHRoaXMucHJvcHMubXVsdGkpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2NvbXBvbmVudERpZE1vdW50Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG5cdFx0XHRpZiAodHlwZW9mIHRoaXMucHJvcHMuYXV0b2ZvY3VzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdXYXJuaW5nOiBUaGUgYXV0b2ZvY3VzIHByb3AgaGFzIGNoYW5nZWQgdG8gYXV0b0ZvY3VzLCBzdXBwb3J0IHdpbGwgYmUgcmVtb3ZlZCBhZnRlciByZWFjdC1zZWxlY3RAMS4wJyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5wcm9wcy5hdXRvRm9jdXMgfHwgdGhpcy5wcm9wcy5hdXRvZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuXHRcdFx0dmFyIHZhbHVlQXJyYXkgPSB0aGlzLmdldFZhbHVlQXJyYXkobmV4dFByb3BzLnZhbHVlLCBuZXh0UHJvcHMpO1xuXG5cdFx0XHRpZiAobmV4dFByb3BzLnJlcXVpcmVkKSB7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0XHRcdHJlcXVpcmVkOiBoYW5kbGVSZXF1aXJlZCh2YWx1ZUFycmF5WzBdLCBuZXh0UHJvcHMubXVsdGkpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnByb3BzLnJlcXVpcmVkKSB7XG5cdFx0XHRcdC8vIFVzZWQgdG8gYmUgcmVxdWlyZWQgYnV0IGl0J3Mgbm90IGFueSBtb3JlXG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoeyByZXF1aXJlZDogZmFsc2UgfSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnN0YXRlLmlucHV0VmFsdWUgJiYgdGhpcy5wcm9wcy52YWx1ZSAhPT0gbmV4dFByb3BzLnZhbHVlICYmIG5leHRQcm9wcy5vblNlbGVjdFJlc2V0c0lucHV0KSB7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoeyBpbnB1dFZhbHVlOiB0aGlzLmhhbmRsZUlucHV0VmFsdWVDaGFuZ2UoJycpIH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2NvbXBvbmVudERpZFVwZGF0ZScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuXHRcdFx0Ly8gZm9jdXMgdG8gdGhlIHNlbGVjdGVkIG9wdGlvblxuXHRcdFx0aWYgKHRoaXMubWVudSAmJiB0aGlzLmZvY3VzZWQgJiYgdGhpcy5zdGF0ZS5pc09wZW4gJiYgIXRoaXMuaGFzU2Nyb2xsZWRUb09wdGlvbikge1xuXHRcdFx0XHR2YXIgZm9jdXNlZE9wdGlvbk5vZGUgPSBmaW5kRE9NTm9kZSh0aGlzLmZvY3VzZWQpO1xuXHRcdFx0XHR2YXIgbWVudU5vZGUgPSBmaW5kRE9NTm9kZSh0aGlzLm1lbnUpO1xuXG5cdFx0XHRcdHZhciBzY3JvbGxUb3AgPSBtZW51Tm9kZS5zY3JvbGxUb3A7XG5cdFx0XHRcdHZhciBzY3JvbGxCb3R0b20gPSBzY3JvbGxUb3AgKyBtZW51Tm9kZS5vZmZzZXRIZWlnaHQ7XG5cdFx0XHRcdHZhciBvcHRpb25Ub3AgPSBmb2N1c2VkT3B0aW9uTm9kZS5vZmZzZXRUb3A7XG5cdFx0XHRcdHZhciBvcHRpb25Cb3R0b20gPSBvcHRpb25Ub3AgKyBmb2N1c2VkT3B0aW9uTm9kZS5vZmZzZXRIZWlnaHQ7XG5cblx0XHRcdFx0aWYgKHNjcm9sbFRvcCA+IG9wdGlvblRvcCB8fCBzY3JvbGxCb3R0b20gPCBvcHRpb25Cb3R0b20pIHtcblx0XHRcdFx0XHRtZW51Tm9kZS5zY3JvbGxUb3AgPSBmb2N1c2VkT3B0aW9uTm9kZS5vZmZzZXRUb3A7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSBzdGlsbCBzZXQgaGFzU2Nyb2xsZWRUb09wdGlvbiB0byB0cnVlIGV2ZW4gaWYgd2UgZGlkbid0XG5cdFx0XHRcdC8vIGFjdHVhbGx5IG5lZWQgdG8gc2Nyb2xsLCBhcyB3ZSd2ZSBzdGlsbCBjb25maXJtZWQgdGhhdCB0aGVcblx0XHRcdFx0Ly8gb3B0aW9uIGlzIGluIHZpZXcuXG5cdFx0XHRcdHRoaXMuaGFzU2Nyb2xsZWRUb09wdGlvbiA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLnN0YXRlLmlzT3Blbikge1xuXHRcdFx0XHR0aGlzLmhhc1Njcm9sbGVkVG9PcHRpb24gPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX3Njcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlICYmIHRoaXMuZm9jdXNlZCAmJiB0aGlzLm1lbnUpIHtcblx0XHRcdFx0dGhpcy5fc2Nyb2xsVG9Gb2N1c2VkT3B0aW9uT25VcGRhdGUgPSBmYWxzZTtcblx0XHRcdFx0dmFyIGZvY3VzZWRET00gPSBmaW5kRE9NTm9kZSh0aGlzLmZvY3VzZWQpO1xuXHRcdFx0XHR2YXIgbWVudURPTSA9IGZpbmRET01Ob2RlKHRoaXMubWVudSk7XG5cdFx0XHRcdHZhciBmb2N1c2VkUmVjdCA9IGZvY3VzZWRET00uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdHZhciBtZW51UmVjdCA9IG1lbnVET00uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdGlmIChmb2N1c2VkUmVjdC5ib3R0b20gPiBtZW51UmVjdC5ib3R0b20pIHtcblx0XHRcdFx0XHRtZW51RE9NLnNjcm9sbFRvcCA9IGZvY3VzZWRET00ub2Zmc2V0VG9wICsgZm9jdXNlZERPTS5jbGllbnRIZWlnaHQgLSBtZW51RE9NLm9mZnNldEhlaWdodDtcblx0XHRcdFx0fSBlbHNlIGlmIChmb2N1c2VkUmVjdC50b3AgPCBtZW51UmVjdC50b3ApIHtcblx0XHRcdFx0XHRtZW51RE9NLnNjcm9sbFRvcCA9IGZvY3VzZWRET00ub2Zmc2V0VG9wO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5wcm9wcy5zY3JvbGxNZW51SW50b1ZpZXcgJiYgdGhpcy5tZW51Q29udGFpbmVyKSB7XG5cdFx0XHRcdHZhciBtZW51Q29udGFpbmVyUmVjdCA9IHRoaXMubWVudUNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0aWYgKHdpbmRvdy5pbm5lckhlaWdodCA8IG1lbnVDb250YWluZXJSZWN0LmJvdHRvbSArIHRoaXMucHJvcHMubWVudUJ1ZmZlcikge1xuXHRcdFx0XHRcdHdpbmRvdy5zY3JvbGxCeSgwLCBtZW51Q29udGFpbmVyUmVjdC5ib3R0b20gKyB0aGlzLnByb3BzLm1lbnVCdWZmZXIgLSB3aW5kb3cuaW5uZXJIZWlnaHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJldlByb3BzLmRpc2FibGVkICE9PSB0aGlzLnByb3BzLmRpc2FibGVkKSB7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoeyBpc0ZvY3VzZWQ6IGZhbHNlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG5cdFx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJldlN0YXRlLmlzT3BlbiAhPT0gdGhpcy5zdGF0ZS5pc09wZW4pIHtcblx0XHRcdFx0dGhpcy50b2dnbGVUb3VjaE91dHNpZGVFdmVudCh0aGlzLnN0YXRlLmlzT3Blbik7XG5cdFx0XHRcdHZhciBoYW5kbGVyID0gdGhpcy5zdGF0ZS5pc09wZW4gPyB0aGlzLnByb3BzLm9uT3BlbiA6IHRoaXMucHJvcHMub25DbG9zZTtcblx0XHRcdFx0aGFuZGxlciAmJiBoYW5kbGVyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcblx0XHRcdHRoaXMudG9nZ2xlVG91Y2hPdXRzaWRlRXZlbnQoZmFsc2UpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3RvZ2dsZVRvdWNoT3V0c2lkZUV2ZW50Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gdG9nZ2xlVG91Y2hPdXRzaWRlRXZlbnQoZW5hYmxlZCkge1xuXHRcdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdFx0aWYgKCFkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICYmIGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7XG5cdFx0XHRcdFx0ZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29udG91Y2hzdGFydCcsIHRoaXMuaGFuZGxlVG91Y2hPdXRzaWRlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5oYW5kbGVUb3VjaE91dHNpZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoIWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIgJiYgZG9jdW1lbnQuZGV0YWNoRXZlbnQpIHtcblx0XHRcdFx0XHRkb2N1bWVudC5kZXRhY2hFdmVudCgnb250b3VjaHN0YXJ0JywgdGhpcy5oYW5kbGVUb3VjaE91dHNpZGUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLmhhbmRsZVRvdWNoT3V0c2lkZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdoYW5kbGVUb3VjaE91dHNpZGUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVUb3VjaE91dHNpZGUoZXZlbnQpIHtcblx0XHRcdC8vIGhhbmRsZSB0b3VjaCBvdXRzaWRlIG9uIGlvcyB0byBkaXNtaXNzIG1lbnVcblx0XHRcdGlmICh0aGlzLndyYXBwZXIgJiYgIXRoaXMud3JhcHBlci5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG5cdFx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZm9jdXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBmb2N1cygpIHtcblx0XHRcdGlmICghdGhpcy5pbnB1dCkgcmV0dXJuO1xuXHRcdFx0dGhpcy5pbnB1dC5mb2N1cygpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2JsdXJJbnB1dCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGJsdXJJbnB1dCgpIHtcblx0XHRcdGlmICghdGhpcy5pbnB1dCkgcmV0dXJuO1xuXHRcdFx0dGhpcy5pbnB1dC5ibHVyKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlVG91Y2hNb3ZlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVG91Y2hNb3ZlKCkge1xuXHRcdFx0Ly8gU2V0IGEgZmxhZyB0aGF0IHRoZSB2aWV3IGlzIGJlaW5nIGRyYWdnZWRcblx0XHRcdHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2hhbmRsZVRvdWNoU3RhcnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVUb3VjaFN0YXJ0KCkge1xuXHRcdFx0Ly8gU2V0IGEgZmxhZyB0aGF0IHRoZSB2aWV3IGlzIG5vdCBiZWluZyBkcmFnZ2VkXG5cdFx0XHR0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlVG91Y2hFbmQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVUb3VjaEVuZChldmVudCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIHZpZXcgaXMgYmVpbmcgZHJhZ2dlZCwgSW4gdGhpcyBjYXNlXG5cdFx0XHQvLyB3ZSBkb24ndCB3YW50IHRvIGZpcmUgdGhlIGNsaWNrIGV2ZW50IChiZWNhdXNlIHRoZSB1c2VyIG9ubHkgd2FudHMgdG8gc2Nyb2xsKVxuXHRcdFx0aWYgKHRoaXMuZHJhZ2dpbmcpIHJldHVybjtcblxuXHRcdFx0Ly8gRmlyZSB0aGUgbW91c2UgZXZlbnRzXG5cdFx0XHR0aGlzLmhhbmRsZU1vdXNlRG93bihldmVudCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlVG91Y2hFbmRDbGVhclZhbHVlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVG91Y2hFbmRDbGVhclZhbHVlKGV2ZW50KSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgdmlldyBpcyBiZWluZyBkcmFnZ2VkLCBJbiB0aGlzIGNhc2Vcblx0XHRcdC8vIHdlIGRvbid0IHdhbnQgdG8gZmlyZSB0aGUgY2xpY2sgZXZlbnQgKGJlY2F1c2UgdGhlIHVzZXIgb25seSB3YW50cyB0byBzY3JvbGwpXG5cdFx0XHRpZiAodGhpcy5kcmFnZ2luZykgcmV0dXJuO1xuXG5cdFx0XHQvLyBDbGVhciB0aGUgdmFsdWVcblx0XHRcdHRoaXMuY2xlYXJWYWx1ZShldmVudCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlTW91c2VEb3duJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGV2ZW50KSB7XG5cdFx0XHQvLyBpZiB0aGUgZXZlbnQgd2FzIHRyaWdnZXJlZCBieSBhIG1vdXNlZG93biBhbmQgbm90IHRoZSBwcmltYXJ5XG5cdFx0XHQvLyBidXR0b24sIG9yIGlmIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQsIGlnbm9yZSBpdC5cblx0XHRcdGlmICh0aGlzLnByb3BzLmRpc2FibGVkIHx8IGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJykge1xuXHRcdFx0XHRpZiAoIXRoaXMuc3RhdGUuaXNGb2N1c2VkKSB7XG5cdFx0XHRcdFx0dGhpcy5fb3BlbkFmdGVyRm9jdXMgPSB0aGlzLnByb3BzLm9wZW5PbkNsaWNrO1xuXHRcdFx0XHRcdHRoaXMuZm9jdXMoKTtcblx0XHRcdFx0fSBlbHNlIGlmICghdGhpcy5zdGF0ZS5pc09wZW4pIHtcblx0XHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0XHRcdGlzUHNldWRvRm9jdXNlZDogZmFsc2Vcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJldmVudCBkZWZhdWx0IGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHQvLyBmb3IgdGhlIG5vbi1zZWFyY2hhYmxlIHNlbGVjdCwgdG9nZ2xlIHRoZSBtZW51XG5cdFx0XHRpZiAoIXRoaXMucHJvcHMuc2VhcmNoYWJsZSkge1xuXHRcdFx0XHQvLyBUaGlzIGNvZGUgbWVhbnMgdGhhdCBpZiBhIHNlbGVjdCBpcyBzZWFyY2hhYmxlLCBvbkNsaWNrIHRoZSBvcHRpb25zIG1lbnUgd2lsbCBub3QgYXBwZWFyLCBvbmx5IG9uIHN1YnNlcXVlbnQgY2xpY2sgd2lsbCBpdCBvcGVuLlxuXHRcdFx0XHR0aGlzLmZvY3VzKCk7XG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRpc09wZW46ICF0aGlzLnN0YXRlLmlzT3BlblxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc3RhdGUuaXNGb2N1c2VkKSB7XG5cdFx0XHRcdC8vIE9uIGlPUywgd2UgY2FuIGdldCBpbnRvIGEgc3RhdGUgd2hlcmUgd2UgdGhpbmsgdGhlIGlucHV0IGlzIGZvY3VzZWQgYnV0IGl0IGlzbid0IHJlYWxseSxcblx0XHRcdFx0Ly8gc2luY2UgaU9TIGlnbm9yZXMgcHJvZ3JhbW1hdGljIGNhbGxzIHRvIGlucHV0LmZvY3VzKCkgdGhhdCB3ZXJlbid0IHRyaWdnZXJlZCBieSBhIGNsaWNrIGV2ZW50LlxuXHRcdFx0XHQvLyBDYWxsIGZvY3VzKCkgYWdhaW4gaGVyZSB0byBiZSBzYWZlLlxuXHRcdFx0XHR0aGlzLmZvY3VzKCk7XG5cblx0XHRcdFx0dmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcblx0XHRcdFx0dmFyIHRvT3BlbiA9IHRydWU7XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBpbnB1dC5nZXRJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgYWN0dWFsIERPTSBpbnB1dCBpZiB0aGUgcmVmIGlzIGFuIDxBdXRvc2l6ZUlucHV0IC8+IGNvbXBvbmVudFxuXHRcdFx0XHRcdGlucHV0ID0gaW5wdXQuZ2V0SW5wdXQoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGNsZWFycyB0aGUgdmFsdWUgc28gdGhhdCB0aGUgY3Vyc29yIHdpbGwgYmUgYXQgdGhlIGVuZCBvZiBpbnB1dCB3aGVuIHRoZSBjb21wb25lbnQgcmUtcmVuZGVyc1xuXHRcdFx0XHRpbnB1dC52YWx1ZSA9ICcnO1xuXG5cdFx0XHRcdGlmICh0aGlzLl9mb2N1c0FmdGVyQ2xlYXIpIHtcblx0XHRcdFx0XHR0b09wZW4gPSBmYWxzZTtcblx0XHRcdFx0XHR0aGlzLl9mb2N1c0FmdGVyQ2xlYXIgPSBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIHRoZSBpbnB1dCBpcyBmb2N1c2VkLCBlbnN1cmUgdGhlIG1lbnUgaXMgb3BlblxuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRpc09wZW46IHRvT3Blbixcblx0XHRcdFx0XHRpc1BzZXVkb0ZvY3VzZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdGZvY3VzZWRPcHRpb246IG51bGxcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBvdGhlcndpc2UsIGZvY3VzIHRoZSBpbnB1dCBhbmQgb3BlbiB0aGUgbWVudVxuXHRcdFx0XHR0aGlzLl9vcGVuQWZ0ZXJGb2N1cyA9IHRoaXMucHJvcHMub3Blbk9uQ2xpY2s7XG5cdFx0XHRcdHRoaXMuZm9jdXMoKTtcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7IGZvY3VzZWRPcHRpb246IG51bGwgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlTW91c2VEb3duT25BcnJvdycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bk9uQXJyb3coZXZlbnQpIHtcblx0XHRcdC8vIGlmIHRoZSBldmVudCB3YXMgdHJpZ2dlcmVkIGJ5IGEgbW91c2Vkb3duIGFuZCBub3QgdGhlIHByaW1hcnlcblx0XHRcdC8vIGJ1dHRvbiwgb3IgaWYgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZCwgaWdub3JlIGl0LlxuXHRcdFx0aWYgKHRoaXMucHJvcHMuZGlzYWJsZWQgfHwgZXZlbnQudHlwZSA9PT0gJ21vdXNlZG93bicgJiYgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc3RhdGUuaXNPcGVuKSB7XG5cdFx0XHRcdC8vIHByZXZlbnQgZGVmYXVsdCBldmVudCBoYW5kbGVyc1xuXHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0Ly8gY2xvc2UgdGhlIG1lbnVcblx0XHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIElmIHRoZSBtZW51IGlzbid0IG9wZW4sIGxldCB0aGUgZXZlbnQgYnViYmxlIHRvIHRoZSBtYWluIGhhbmRsZU1vdXNlRG93blxuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRpc09wZW46IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlTW91c2VEb3duT25NZW51Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duT25NZW51KGV2ZW50KSB7XG5cdFx0XHQvLyBpZiB0aGUgZXZlbnQgd2FzIHRyaWdnZXJlZCBieSBhIG1vdXNlZG93biBhbmQgbm90IHRoZSBwcmltYXJ5XG5cdFx0XHQvLyBidXR0b24sIG9yIGlmIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQsIGlnbm9yZSBpdC5cblx0XHRcdGlmICh0aGlzLnByb3BzLmRpc2FibGVkIHx8IGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0dGhpcy5fb3BlbkFmdGVyRm9jdXMgPSB0cnVlO1xuXHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2Nsb3NlTWVudScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNsb3NlTWVudSgpIHtcblx0XHRcdGlmICh0aGlzLnByb3BzLm9uQ2xvc2VSZXNldHNJbnB1dCkge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRpbnB1dFZhbHVlOiB0aGlzLmhhbmRsZUlucHV0VmFsdWVDaGFuZ2UoJycpLFxuXHRcdFx0XHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0XHRcdFx0aXNQc2V1ZG9Gb2N1c2VkOiB0aGlzLnN0YXRlLmlzRm9jdXNlZCAmJiAhdGhpcy5wcm9wcy5tdWx0aVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0XHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0XHRcdFx0aXNQc2V1ZG9Gb2N1c2VkOiB0aGlzLnN0YXRlLmlzRm9jdXNlZCAmJiAhdGhpcy5wcm9wcy5tdWx0aVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaGFzU2Nyb2xsZWRUb09wdGlvbiA9IGZhbHNlO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2hhbmRsZUlucHV0Rm9jdXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVJbnB1dEZvY3VzKGV2ZW50KSB7XG5cdFx0XHRpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG5cdFx0XHR2YXIgdG9PcGVuID0gdGhpcy5zdGF0ZS5pc09wZW4gfHwgdGhpcy5fb3BlbkFmdGVyRm9jdXMgfHwgdGhpcy5wcm9wcy5vcGVuT25Gb2N1cztcblx0XHRcdHRvT3BlbiA9IHRoaXMuX2ZvY3VzQWZ0ZXJDbGVhciA/IGZhbHNlIDogdG9PcGVuOyAvL2lmIGZvY3VzIGhhcHBlbnMgYWZ0ZXIgY2xlYXIgdmFsdWVzLCBkb24ndCBvcGVuIGRyb3Bkb3duIHlldC5cblxuXHRcdFx0aWYgKHRoaXMucHJvcHMub25Gb2N1cykge1xuXHRcdFx0XHR0aGlzLnByb3BzLm9uRm9jdXMoZXZlbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0aXNGb2N1c2VkOiB0cnVlLFxuXHRcdFx0XHRpc09wZW46ICEhdG9PcGVuXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5fZm9jdXNBZnRlckNsZWFyID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9vcGVuQWZ0ZXJGb2N1cyA9IGZhbHNlO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2hhbmRsZUlucHV0Qmx1cicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUlucHV0Qmx1cihldmVudCkge1xuXHRcdFx0Ly8gVGhlIGNoZWNrIGZvciBtZW51LmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQpIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IElFMTEncyBzY3JvbGxiYXIgZnJvbSBjbG9zaW5nIHRoZSBtZW51IGluIGNlcnRhaW4gY29udGV4dHMuXG5cdFx0XHRpZiAodGhpcy5tZW51ICYmICh0aGlzLm1lbnUgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgdGhpcy5tZW51LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMucHJvcHMub25CbHVyKSB7XG5cdFx0XHRcdHRoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcblx0XHRcdH1cblx0XHRcdHZhciBvbkJsdXJyZWRTdGF0ZSA9IHtcblx0XHRcdFx0aXNGb2N1c2VkOiBmYWxzZSxcblx0XHRcdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRcdFx0aXNQc2V1ZG9Gb2N1c2VkOiBmYWxzZVxuXHRcdFx0fTtcblx0XHRcdGlmICh0aGlzLnByb3BzLm9uQmx1clJlc2V0c0lucHV0KSB7XG5cdFx0XHRcdG9uQmx1cnJlZFN0YXRlLmlucHV0VmFsdWUgPSB0aGlzLmhhbmRsZUlucHV0VmFsdWVDaGFuZ2UoJycpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zZXRTdGF0ZShvbkJsdXJyZWRTdGF0ZSk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlSW5wdXRDaGFuZ2UnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVJbnB1dENoYW5nZShldmVudCkge1xuXHRcdFx0dmFyIG5ld0lucHV0VmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cblx0XHRcdGlmICh0aGlzLnN0YXRlLmlucHV0VmFsdWUgIT09IGV2ZW50LnRhcmdldC52YWx1ZSkge1xuXHRcdFx0XHRuZXdJbnB1dFZhbHVlID0gdGhpcy5oYW5kbGVJbnB1dFZhbHVlQ2hhbmdlKG5ld0lucHV0VmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0aW5wdXRWYWx1ZTogbmV3SW5wdXRWYWx1ZSxcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRpc1BzZXVkb0ZvY3VzZWQ6IGZhbHNlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdzZXRJbnB1dFZhbHVlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2V0SW5wdXRWYWx1ZShuZXdWYWx1ZSkge1xuXHRcdFx0aWYgKHRoaXMucHJvcHMub25JbnB1dENoYW5nZSkge1xuXHRcdFx0XHR2YXIgbmV4dFN0YXRlID0gdGhpcy5wcm9wcy5vbklucHV0Q2hhbmdlKG5ld1ZhbHVlKTtcblx0XHRcdFx0aWYgKG5leHRTdGF0ZSAhPSBudWxsICYmICh0eXBlb2YgbmV4dFN0YXRlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihuZXh0U3RhdGUpKSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRuZXdWYWx1ZSA9ICcnICsgbmV4dFN0YXRlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0aW5wdXRWYWx1ZTogbmV3VmFsdWVcblx0XHRcdH0pO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2hhbmRsZUlucHV0VmFsdWVDaGFuZ2UnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVJbnB1dFZhbHVlQ2hhbmdlKG5ld1ZhbHVlKSB7XG5cdFx0XHRpZiAodGhpcy5wcm9wcy5vbklucHV0Q2hhbmdlKSB7XG5cdFx0XHRcdHZhciBuZXh0U3RhdGUgPSB0aGlzLnByb3BzLm9uSW5wdXRDaGFuZ2UobmV3VmFsdWUpO1xuXHRcdFx0XHQvLyBOb3RlOiAhPSB1c2VkIGRlbGliZXJhdGVseSBoZXJlIHRvIGNhdGNoIHVuZGVmaW5lZCBhbmQgbnVsbFxuXHRcdFx0XHRpZiAobmV4dFN0YXRlICE9IG51bGwgJiYgKHR5cGVvZiBuZXh0U3RhdGUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG5leHRTdGF0ZSkpICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdG5ld1ZhbHVlID0gJycgKyBuZXh0U3RhdGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBuZXdWYWx1ZTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdoYW5kbGVLZXlEb3duJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkge1xuXHRcdFx0aWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHJldHVybjtcblxuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uSW5wdXRLZXlEb3duID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHRoaXMucHJvcHMub25JbnB1dEtleURvd24oZXZlbnQpO1xuXHRcdFx0XHRpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcblx0XHRcdFx0Y2FzZSA4OlxuXHRcdFx0XHRcdC8vIGJhY2tzcGFjZVxuXHRcdFx0XHRcdGlmICghdGhpcy5zdGF0ZS5pbnB1dFZhbHVlICYmIHRoaXMucHJvcHMuYmFja3NwYWNlUmVtb3Zlcykge1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdHRoaXMucG9wVmFsdWUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgOTpcblx0XHRcdFx0XHQvLyB0YWJcblx0XHRcdFx0XHRpZiAoZXZlbnQuc2hpZnRLZXkgfHwgIXRoaXMuc3RhdGUuaXNPcGVuIHx8ICF0aGlzLnByb3BzLnRhYlNlbGVjdHNWYWx1ZSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RGb2N1c2VkT3B0aW9uKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgMTM6XG5cdFx0XHRcdFx0Ly8gZW50ZXJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdGlmICh0aGlzLnN0YXRlLmlzT3Blbikge1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RGb2N1c2VkT3B0aW9uKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuZm9jdXNOZXh0T3B0aW9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIDI3OlxuXHRcdFx0XHRcdC8vIGVzY2FwZVxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuc3RhdGUuaXNPcGVuKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLnByb3BzLmNsZWFyYWJsZSAmJiB0aGlzLnByb3BzLmVzY2FwZUNsZWFyc1ZhbHVlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsZWFyVmFsdWUoZXZlbnQpO1xuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdC8vIHNwYWNlXG5cdFx0XHRcdFx0aWYgKHRoaXMucHJvcHMuc2VhcmNoYWJsZSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLnN0YXRlLmlzT3Blbikge1xuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c05leHRPcHRpb24oKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHR0aGlzLnNlbGVjdEZvY3VzZWRPcHRpb24oKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHQvLyB1cFxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c1ByZXZpb3VzT3B0aW9uKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdFx0Ly8gZG93blxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c05leHRPcHRpb24oKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAzMzpcblx0XHRcdFx0XHQvLyBwYWdlIHVwXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR0aGlzLmZvY3VzUGFnZVVwT3B0aW9uKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgMzQ6XG5cdFx0XHRcdFx0Ly8gcGFnZSBkb3duXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR0aGlzLmZvY3VzUGFnZURvd25PcHRpb24oKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAzNTpcblx0XHRcdFx0XHQvLyBlbmQga2V5XG5cdFx0XHRcdFx0aWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR0aGlzLmZvY3VzRW5kT3B0aW9uKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgMzY6XG5cdFx0XHRcdFx0Ly8gaG9tZSBrZXlcblx0XHRcdFx0XHRpZiAoZXZlbnQuc2hpZnRLZXkpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHRoaXMuZm9jdXNTdGFydE9wdGlvbigpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIDQ2OlxuXHRcdFx0XHRcdC8vIGRlbGV0ZVxuXHRcdFx0XHRcdGlmICghdGhpcy5zdGF0ZS5pbnB1dFZhbHVlICYmIHRoaXMucHJvcHMuZGVsZXRlUmVtb3Zlcykge1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdHRoaXMucG9wVmFsdWUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlVmFsdWVDbGljaycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGhhbmRsZVZhbHVlQ2xpY2sob3B0aW9uLCBldmVudCkge1xuXHRcdFx0aWYgKCF0aGlzLnByb3BzLm9uVmFsdWVDbGljaykgcmV0dXJuO1xuXHRcdFx0dGhpcy5wcm9wcy5vblZhbHVlQ2xpY2sob3B0aW9uLCBldmVudCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaGFuZGxlTWVudVNjcm9sbCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU1lbnVTY3JvbGwoZXZlbnQpIHtcblx0XHRcdGlmICghdGhpcy5wcm9wcy5vbk1lbnVTY3JvbGxUb0JvdHRvbSkgcmV0dXJuO1xuXHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuXHRcdFx0aWYgKHRhcmdldC5zY3JvbGxIZWlnaHQgPiB0YXJnZXQub2Zmc2V0SGVpZ2h0ICYmIHRhcmdldC5zY3JvbGxIZWlnaHQgLSB0YXJnZXQub2Zmc2V0SGVpZ2h0IC0gdGFyZ2V0LnNjcm9sbFRvcCA8PSAwKSB7XG5cdFx0XHRcdHRoaXMucHJvcHMub25NZW51U2Nyb2xsVG9Cb3R0b20oKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdnZXRPcHRpb25MYWJlbCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldE9wdGlvbkxhYmVsKG9wKSB7XG5cdFx0XHRyZXR1cm4gb3BbdGhpcy5wcm9wcy5sYWJlbEtleV07XG5cdFx0fVxuXG5cdFx0LyoqXG4gICAqIFR1cm5zIGEgdmFsdWUgaW50byBhbiBhcnJheSBmcm9tIHRoZSBnaXZlbiBvcHRpb25zXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcnxBcnJheX0gdmFsdWVcdFx0LSB0aGUgdmFsdWUgb2YgdGhlIHNlbGVjdCBpbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH1cdFx0bmV4dFByb3BzXHQtIG9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgbmV4dFByb3BzIHNvIHRoZSByZXR1cm5lZCBhcnJheSB1c2VzIHRoZSBsYXRlc3QgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJuc1x0e0FycmF5fVx0dGhlIHZhbHVlIG9mIHRoZSBzZWxlY3QgcmVwcmVzZW50ZWQgaW4gYW4gYXJyYXlcbiAgICovXG5cblx0fSwge1xuXHRcdGtleTogJ2dldFZhbHVlQXJyYXknLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZUFycmF5KHZhbHVlKSB7XG5cdFx0XHR2YXIgbmV4dFByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG5cblx0XHRcdC8qKiBzdXBwb3J0IG9wdGlvbmFsbHkgcGFzc2luZyBpbiB0aGUgYG5leHRQcm9wc2Agc28gYGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNgIHVwZGF0ZXMgd2lsbCBmdW5jdGlvbiBhcyBleHBlY3RlZCAqL1xuXHRcdFx0dmFyIHByb3BzID0gKHR5cGVvZiBuZXh0UHJvcHMgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG5leHRQcm9wcykpID09PSAnb2JqZWN0JyA/IG5leHRQcm9wcyA6IHRoaXMucHJvcHM7XG5cdFx0XHRpZiAocHJvcHMubXVsdGkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnNwbGl0KHByb3BzLmRlbGltaXRlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW107XG5cdFx0XHRcdFx0dmFsdWUgPSBbdmFsdWVdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGV4cGFuZFZhbHVlKHZhbHVlLCBwcm9wcyk7XG5cdFx0XHRcdH0pLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuXHRcdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHZhciBleHBhbmRlZFZhbHVlID0gZXhwYW5kVmFsdWUodmFsdWUsIHByb3BzKTtcblx0XHRcdHJldHVybiBleHBhbmRlZFZhbHVlID8gW2V4cGFuZGVkVmFsdWVdIDogW107XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnc2V0VmFsdWUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBzZXRWYWx1ZSh2YWx1ZSkge1xuXHRcdFx0dmFyIF90aGlzMiA9IHRoaXM7XG5cblx0XHRcdGlmICh0aGlzLnByb3BzLmF1dG9CbHVyKSB7XG5cdFx0XHRcdHRoaXMuYmx1cklucHV0KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5wcm9wcy5yZXF1aXJlZCkge1xuXHRcdFx0XHR2YXIgcmVxdWlyZWQgPSBoYW5kbGVSZXF1aXJlZCh2YWx1ZSwgdGhpcy5wcm9wcy5tdWx0aSk7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoeyByZXF1aXJlZDogcmVxdWlyZWQgfSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5wcm9wcy5zaW1wbGVWYWx1ZSAmJiB2YWx1ZSkge1xuXHRcdFx0XHR2YWx1ZSA9IHRoaXMucHJvcHMubXVsdGkgPyB2YWx1ZS5tYXAoZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0XHRyZXR1cm4gaVtfdGhpczIucHJvcHMudmFsdWVLZXldO1xuXHRcdFx0XHR9KS5qb2luKHRoaXMucHJvcHMuZGVsaW1pdGVyKSA6IHZhbHVlW3RoaXMucHJvcHMudmFsdWVLZXldO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcblx0XHRcdFx0dGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnc2VsZWN0VmFsdWUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBzZWxlY3RWYWx1ZSh2YWx1ZSkge1xuXHRcdFx0dmFyIF90aGlzMyA9IHRoaXM7XG5cblx0XHRcdC8vIE5PVEU6IHdlIGFjdHVhbGx5IGFkZC9zZXQgdGhlIHZhbHVlIGluIGEgY2FsbGJhY2sgdG8gbWFrZSBzdXJlIHRoZVxuXHRcdFx0Ly8gaW5wdXQgdmFsdWUgaXMgZW1wdHkgdG8gYXZvaWQgc3R5bGluZyBpc3N1ZXMgaW4gQ2hyb21lXG5cdFx0XHRpZiAodGhpcy5wcm9wcy5jbG9zZU9uU2VsZWN0KSB7XG5cdFx0XHRcdHRoaXMuaGFzU2Nyb2xsZWRUb09wdGlvbiA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHVwZGF0ZWRWYWx1ZSA9IHRoaXMucHJvcHMub25TZWxlY3RSZXNldHNJbnB1dCA/ICcnIDogdGhpcy5zdGF0ZS5pbnB1dFZhbHVlO1xuXHRcdFx0aWYgKHRoaXMucHJvcHMubXVsdGkpIHtcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0Zm9jdXNlZEluZGV4OiBudWxsLFxuXHRcdFx0XHRcdGlucHV0VmFsdWU6IHRoaXMuaGFuZGxlSW5wdXRWYWx1ZUNoYW5nZSh1cGRhdGVkVmFsdWUpLFxuXHRcdFx0XHRcdGlzT3BlbjogIXRoaXMucHJvcHMuY2xvc2VPblNlbGVjdFxuXHRcdFx0XHR9LCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0dmFyIHZhbHVlQXJyYXkgPSBfdGhpczMuZ2V0VmFsdWVBcnJheShfdGhpczMucHJvcHMudmFsdWUpO1xuXHRcdFx0XHRcdGlmICh2YWx1ZUFycmF5LnNvbWUoZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBpW190aGlzMy5wcm9wcy52YWx1ZUtleV0gPT09IHZhbHVlW190aGlzMy5wcm9wcy52YWx1ZUtleV07XG5cdFx0XHRcdFx0fSkpIHtcblx0XHRcdFx0XHRcdF90aGlzMy5yZW1vdmVWYWx1ZSh2YWx1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdF90aGlzMy5hZGRWYWx1ZSh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0XHRcdGlucHV0VmFsdWU6IHRoaXMuaGFuZGxlSW5wdXRWYWx1ZUNoYW5nZSh1cGRhdGVkVmFsdWUpLFxuXHRcdFx0XHRcdGlzT3BlbjogIXRoaXMucHJvcHMuY2xvc2VPblNlbGVjdCxcblx0XHRcdFx0XHRpc1BzZXVkb0ZvY3VzZWQ6IHRoaXMuc3RhdGUuaXNGb2N1c2VkXG5cdFx0XHRcdH0sIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRfdGhpczMuc2V0VmFsdWUodmFsdWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdhZGRWYWx1ZScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGFkZFZhbHVlKHZhbHVlKSB7XG5cdFx0XHR2YXIgdmFsdWVBcnJheSA9IHRoaXMuZ2V0VmFsdWVBcnJheSh0aGlzLnByb3BzLnZhbHVlKTtcblx0XHRcdHZhciB2aXNpYmxlT3B0aW9ucyA9IHRoaXMuX3Zpc2libGVPcHRpb25zLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG5cdFx0XHRcdHJldHVybiAhdmFsLmRpc2FibGVkO1xuXHRcdFx0fSk7XG5cdFx0XHR2YXIgbGFzdFZhbHVlSW5kZXggPSB2aXNpYmxlT3B0aW9ucy5pbmRleE9mKHZhbHVlKTtcblx0XHRcdHRoaXMuc2V0VmFsdWUodmFsdWVBcnJheS5jb25jYXQodmFsdWUpKTtcblx0XHRcdGlmICh2aXNpYmxlT3B0aW9ucy5sZW5ndGggLSAxID09PSBsYXN0VmFsdWVJbmRleCkge1xuXHRcdFx0XHQvLyB0aGUgbGFzdCBvcHRpb24gd2FzIHNlbGVjdGVkOyBmb2N1cyB0aGUgc2Vjb25kLWxhc3Qgb25lXG5cdFx0XHRcdHRoaXMuZm9jdXNPcHRpb24odmlzaWJsZU9wdGlvbnNbbGFzdFZhbHVlSW5kZXggLSAxXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHZpc2libGVPcHRpb25zLmxlbmd0aCA+IGxhc3RWYWx1ZUluZGV4KSB7XG5cdFx0XHRcdC8vIGZvY3VzIHRoZSBvcHRpb24gYmVsb3cgdGhlIHNlbGVjdGVkIG9uZVxuXHRcdFx0XHR0aGlzLmZvY3VzT3B0aW9uKHZpc2libGVPcHRpb25zW2xhc3RWYWx1ZUluZGV4ICsgMV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3BvcFZhbHVlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcG9wVmFsdWUoKSB7XG5cdFx0XHR2YXIgdmFsdWVBcnJheSA9IHRoaXMuZ2V0VmFsdWVBcnJheSh0aGlzLnByb3BzLnZhbHVlKTtcblx0XHRcdGlmICghdmFsdWVBcnJheS5sZW5ndGgpIHJldHVybjtcblx0XHRcdGlmICh2YWx1ZUFycmF5W3ZhbHVlQXJyYXkubGVuZ3RoIC0gMV0uY2xlYXJhYmxlVmFsdWUgPT09IGZhbHNlKSByZXR1cm47XG5cdFx0XHR0aGlzLnNldFZhbHVlKHRoaXMucHJvcHMubXVsdGkgPyB2YWx1ZUFycmF5LnNsaWNlKDAsIHZhbHVlQXJyYXkubGVuZ3RoIC0gMSkgOiBudWxsKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW1vdmVWYWx1ZScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbW92ZVZhbHVlKHZhbHVlKSB7XG5cdFx0XHR2YXIgX3RoaXM0ID0gdGhpcztcblxuXHRcdFx0dmFyIHZhbHVlQXJyYXkgPSB0aGlzLmdldFZhbHVlQXJyYXkodGhpcy5wcm9wcy52YWx1ZSk7XG5cdFx0XHR0aGlzLnNldFZhbHVlKHZhbHVlQXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRcdHJldHVybiBpW190aGlzNC5wcm9wcy52YWx1ZUtleV0gIT09IHZhbHVlW190aGlzNC5wcm9wcy52YWx1ZUtleV07XG5cdFx0XHR9KSk7XG5cdFx0XHR0aGlzLmZvY3VzKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY2xlYXJWYWx1ZScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNsZWFyVmFsdWUoZXZlbnQpIHtcblx0XHRcdC8vIGlmIHRoZSBldmVudCB3YXMgdHJpZ2dlcmVkIGJ5IGEgbW91c2Vkb3duIGFuZCBub3QgdGhlIHByaW1hcnlcblx0XHRcdC8vIGJ1dHRvbiwgaWdub3JlIGl0LlxuXHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdHRoaXMuc2V0VmFsdWUodGhpcy5nZXRSZXNldFZhbHVlKCkpO1xuXHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdGlucHV0VmFsdWU6IHRoaXMuaGFuZGxlSW5wdXRWYWx1ZUNoYW5nZSgnJyksXG5cdFx0XHRcdGlzT3BlbjogZmFsc2Vcblx0XHRcdH0sIHRoaXMuZm9jdXMpO1xuXG5cdFx0XHR0aGlzLl9mb2N1c0FmdGVyQ2xlYXIgPSB0cnVlO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2dldFJlc2V0VmFsdWUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXRSZXNldFZhbHVlKCkge1xuXHRcdFx0aWYgKHRoaXMucHJvcHMucmVzZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb3BzLnJlc2V0VmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucHJvcHMubXVsdGkpIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZm9jdXNPcHRpb24nLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBmb2N1c09wdGlvbihvcHRpb24pIHtcblx0XHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0XHRmb2N1c2VkT3B0aW9uOiBvcHRpb25cblx0XHRcdH0pO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2ZvY3VzTmV4dE9wdGlvbicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvY3VzTmV4dE9wdGlvbigpIHtcblx0XHRcdHRoaXMuZm9jdXNBZGphY2VudE9wdGlvbignbmV4dCcpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2ZvY3VzUHJldmlvdXNPcHRpb24nLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBmb2N1c1ByZXZpb3VzT3B0aW9uKCkge1xuXHRcdFx0dGhpcy5mb2N1c0FkamFjZW50T3B0aW9uKCdwcmV2aW91cycpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2ZvY3VzUGFnZVVwT3B0aW9uJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZm9jdXNQYWdlVXBPcHRpb24oKSB7XG5cdFx0XHR0aGlzLmZvY3VzQWRqYWNlbnRPcHRpb24oJ3BhZ2VfdXAnKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdmb2N1c1BhZ2VEb3duT3B0aW9uJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZm9jdXNQYWdlRG93bk9wdGlvbigpIHtcblx0XHRcdHRoaXMuZm9jdXNBZGphY2VudE9wdGlvbigncGFnZV9kb3duJyk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZm9jdXNTdGFydE9wdGlvbicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvY3VzU3RhcnRPcHRpb24oKSB7XG5cdFx0XHR0aGlzLmZvY3VzQWRqYWNlbnRPcHRpb24oJ3N0YXJ0Jyk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZm9jdXNFbmRPcHRpb24nLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBmb2N1c0VuZE9wdGlvbigpIHtcblx0XHRcdHRoaXMuZm9jdXNBZGphY2VudE9wdGlvbignZW5kJyk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZm9jdXNBZGphY2VudE9wdGlvbicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvY3VzQWRqYWNlbnRPcHRpb24oZGlyKSB7XG5cdFx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuX3Zpc2libGVPcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uLCBpbmRleCkge1xuXHRcdFx0XHRyZXR1cm4geyBvcHRpb246IG9wdGlvbiwgaW5kZXg6IGluZGV4IH07XG5cdFx0XHR9KS5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gIW9wdGlvbi5vcHRpb24uZGlzYWJsZWQ7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuX3Njcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gdHJ1ZTtcblx0XHRcdGlmICghdGhpcy5zdGF0ZS5pc09wZW4pIHtcblx0XHRcdFx0dmFyIG5ld1N0YXRlID0ge1xuXHRcdFx0XHRcdGZvY3VzZWRPcHRpb246IHRoaXMuX2ZvY3VzZWRPcHRpb24gfHwgKG9wdGlvbnMubGVuZ3RoID8gb3B0aW9uc1tkaXIgPT09ICduZXh0JyA/IDAgOiBvcHRpb25zLmxlbmd0aCAtIDFdLm9wdGlvbiA6IG51bGwpLFxuXHRcdFx0XHRcdGlzT3BlbjogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAodGhpcy5wcm9wcy5vblNlbGVjdFJlc2V0c0lucHV0KSB7XG5cdFx0XHRcdFx0bmV3U3RhdGUuaW5wdXRWYWx1ZSA9ICcnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9wdGlvbnMubGVuZ3RoKSByZXR1cm47XG5cdFx0XHR2YXIgZm9jdXNlZEluZGV4ID0gLTE7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHRoaXMuX2ZvY3VzZWRPcHRpb24gPT09IG9wdGlvbnNbaV0ub3B0aW9uKSB7XG5cdFx0XHRcdFx0Zm9jdXNlZEluZGV4ID0gaTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGRpciA9PT0gJ25leHQnICYmIGZvY3VzZWRJbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0Zm9jdXNlZEluZGV4ID0gKGZvY3VzZWRJbmRleCArIDEpICUgb3B0aW9ucy5sZW5ndGg7XG5cdFx0XHR9IGVsc2UgaWYgKGRpciA9PT0gJ3ByZXZpb3VzJykge1xuXHRcdFx0XHRpZiAoZm9jdXNlZEluZGV4ID4gMCkge1xuXHRcdFx0XHRcdGZvY3VzZWRJbmRleCA9IGZvY3VzZWRJbmRleCAtIDE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9jdXNlZEluZGV4ID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGRpciA9PT0gJ3N0YXJ0Jykge1xuXHRcdFx0XHRmb2N1c2VkSW5kZXggPSAwO1xuXHRcdFx0fSBlbHNlIGlmIChkaXIgPT09ICdlbmQnKSB7XG5cdFx0XHRcdGZvY3VzZWRJbmRleCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcblx0XHRcdH0gZWxzZSBpZiAoZGlyID09PSAncGFnZV91cCcpIHtcblx0XHRcdFx0dmFyIHBvdGVudGlhbEluZGV4ID0gZm9jdXNlZEluZGV4IC0gdGhpcy5wcm9wcy5wYWdlU2l6ZTtcblx0XHRcdFx0aWYgKHBvdGVudGlhbEluZGV4IDwgMCkge1xuXHRcdFx0XHRcdGZvY3VzZWRJbmRleCA9IDA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9jdXNlZEluZGV4ID0gcG90ZW50aWFsSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoZGlyID09PSAncGFnZV9kb3duJykge1xuXHRcdFx0XHR2YXIgX3BvdGVudGlhbEluZGV4ID0gZm9jdXNlZEluZGV4ICsgdGhpcy5wcm9wcy5wYWdlU2l6ZTtcblx0XHRcdFx0aWYgKF9wb3RlbnRpYWxJbmRleCA+IG9wdGlvbnMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdGZvY3VzZWRJbmRleCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb2N1c2VkSW5kZXggPSBfcG90ZW50aWFsSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGZvY3VzZWRJbmRleCA9PT0gLTEpIHtcblx0XHRcdFx0Zm9jdXNlZEluZGV4ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdGZvY3VzZWRJbmRleDogb3B0aW9uc1tmb2N1c2VkSW5kZXhdLmluZGV4LFxuXHRcdFx0XHRmb2N1c2VkT3B0aW9uOiBvcHRpb25zW2ZvY3VzZWRJbmRleF0ub3B0aW9uXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdnZXRGb2N1c2VkT3B0aW9uJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0Rm9jdXNlZE9wdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9mb2N1c2VkT3B0aW9uO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3NlbGVjdEZvY3VzZWRPcHRpb24nLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBzZWxlY3RGb2N1c2VkT3B0aW9uKCkge1xuXHRcdFx0aWYgKHRoaXMuX2ZvY3VzZWRPcHRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2VsZWN0VmFsdWUodGhpcy5fZm9jdXNlZE9wdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyTG9hZGluZycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlckxvYWRpbmcoKSB7XG5cdFx0XHRpZiAoIXRoaXMucHJvcHMuaXNMb2FkaW5nKSByZXR1cm47XG5cdFx0XHRyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J3NwYW4nLFxuXHRcdFx0XHR7IGNsYXNzTmFtZTogJ1NlbGVjdC1sb2FkaW5nLXpvbmUnLCAnYXJpYS1oaWRkZW4nOiAndHJ1ZScgfSxcblx0XHRcdFx0UmVhY3QuY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgY2xhc3NOYW1lOiAnU2VsZWN0LWxvYWRpbmcnIH0pXG5cdFx0XHQpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3JlbmRlclZhbHVlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVmFsdWUodmFsdWVBcnJheSwgaXNPcGVuKSB7XG5cdFx0XHR2YXIgX3RoaXM1ID0gdGhpcztcblxuXHRcdFx0dmFyIHJlbmRlckxhYmVsID0gdGhpcy5wcm9wcy52YWx1ZVJlbmRlcmVyIHx8IHRoaXMuZ2V0T3B0aW9uTGFiZWw7XG5cdFx0XHR2YXIgVmFsdWVDb21wb25lbnQgPSB0aGlzLnByb3BzLnZhbHVlQ29tcG9uZW50O1xuXHRcdFx0aWYgKCF2YWx1ZUFycmF5Lmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgc2hvd1BsYWNlaG9sZGVyID0gc2hvdWxkU2hvd1BsYWNlaG9sZGVyKHRoaXMuc3RhdGUsIHRoaXMucHJvcHMsIGlzT3Blbik7XG5cdFx0XHRcdHJldHVybiBzaG93UGxhY2Vob2xkZXIgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdHsgY2xhc3NOYW1lOiAnU2VsZWN0LXBsYWNlaG9sZGVyJyB9LFxuXHRcdFx0XHRcdHRoaXMucHJvcHMucGxhY2Vob2xkZXJcblx0XHRcdFx0KSA6IG51bGw7XG5cdFx0XHR9XG5cdFx0XHR2YXIgb25DbGljayA9IHRoaXMucHJvcHMub25WYWx1ZUNsaWNrID8gdGhpcy5oYW5kbGVWYWx1ZUNsaWNrIDogbnVsbDtcblx0XHRcdGlmICh0aGlzLnByb3BzLm11bHRpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZUFycmF5Lm1hcChmdW5jdGlvbiAodmFsdWUsIGkpIHtcblx0XHRcdFx0XHRyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdFZhbHVlQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRkaXNhYmxlZDogX3RoaXM1LnByb3BzLmRpc2FibGVkIHx8IHZhbHVlLmNsZWFyYWJsZVZhbHVlID09PSBmYWxzZSxcblx0XHRcdFx0XHRcdFx0aWQ6IF90aGlzNS5faW5zdGFuY2VQcmVmaXggKyAnLXZhbHVlLScgKyBpLFxuXHRcdFx0XHRcdFx0XHRpbnN0YW5jZVByZWZpeDogX3RoaXM1Ll9pbnN0YW5jZVByZWZpeCxcblx0XHRcdFx0XHRcdFx0a2V5OiAndmFsdWUtJyArIGkgKyAnLScgKyB2YWx1ZVtfdGhpczUucHJvcHMudmFsdWVLZXldLFxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrOiBvbkNsaWNrLFxuXHRcdFx0XHRcdFx0XHRvblJlbW92ZTogX3RoaXM1LnJlbW92ZVZhbHVlLFxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcjogX3RoaXM1LnByb3BzLnBsYWNlaG9sZGVyLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyZW5kZXJMYWJlbCh2YWx1ZSwgaSksXG5cdFx0XHRcdFx0XHRSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFx0XHQnc3BhbicsXG5cdFx0XHRcdFx0XHRcdHsgY2xhc3NOYW1lOiAnU2VsZWN0LWFyaWEtb25seScgfSxcblx0XHRcdFx0XHRcdFx0J1xceEEwJ1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChzaG91bGRTaG93VmFsdWUodGhpcy5zdGF0ZSwgdGhpcy5wcm9wcykpIHtcblx0XHRcdFx0aWYgKGlzT3Blbikgb25DbGljayA9IG51bGw7XG5cdFx0XHRcdHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFZhbHVlQ29tcG9uZW50LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGRpc2FibGVkOiB0aGlzLnByb3BzLmRpc2FibGVkLFxuXHRcdFx0XHRcdFx0aWQ6IHRoaXMuX2luc3RhbmNlUHJlZml4ICsgJy12YWx1ZS1pdGVtJyxcblx0XHRcdFx0XHRcdGluc3RhbmNlUHJlZml4OiB0aGlzLl9pbnN0YW5jZVByZWZpeCxcblx0XHRcdFx0XHRcdG9uQ2xpY2s6IG9uQ2xpY2ssXG5cdFx0XHRcdFx0XHRwbGFjZWhvbGRlcjogdGhpcy5wcm9wcy5wbGFjZWhvbGRlcixcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZUFycmF5WzBdXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZW5kZXJMYWJlbCh2YWx1ZUFycmF5WzBdKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3JlbmRlcklucHV0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVySW5wdXQodmFsdWVBcnJheSwgZm9jdXNlZE9wdGlvbkluZGV4KSB7XG5cdFx0XHR2YXIgX2NsYXNzTmFtZXMsXG5cdFx0XHQgICAgX3RoaXM2ID0gdGhpcztcblxuXHRcdFx0dmFyIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoJ1NlbGVjdC1pbnB1dCcsIHRoaXMucHJvcHMuaW5wdXRQcm9wcy5jbGFzc05hbWUpO1xuXHRcdFx0dmFyIGlzT3BlbiA9IHRoaXMuc3RhdGUuaXNPcGVuO1xuXG5cdFx0XHR2YXIgYXJpYU93bnMgPSBjbGFzc05hbWVzKChfY2xhc3NOYW1lcyA9IHt9LCBkZWZpbmVQcm9wZXJ0eShfY2xhc3NOYW1lcywgdGhpcy5faW5zdGFuY2VQcmVmaXggKyAnLWxpc3QnLCBpc09wZW4pLCBkZWZpbmVQcm9wZXJ0eShfY2xhc3NOYW1lcywgdGhpcy5faW5zdGFuY2VQcmVmaXggKyAnLWJhY2tzcGFjZS1yZW1vdmUtbWVzc2FnZScsIHRoaXMucHJvcHMubXVsdGkgJiYgIXRoaXMucHJvcHMuZGlzYWJsZWQgJiYgdGhpcy5zdGF0ZS5pc0ZvY3VzZWQgJiYgIXRoaXMuc3RhdGUuaW5wdXRWYWx1ZSksIF9jbGFzc05hbWVzKSk7XG5cblx0XHRcdHZhciB2YWx1ZSA9IHRoaXMuc3RhdGUuaW5wdXRWYWx1ZTtcblx0XHRcdGlmICh2YWx1ZSAmJiAhdGhpcy5wcm9wcy5vblNlbGVjdFJlc2V0c0lucHV0ICYmICF0aGlzLnN0YXRlLmlzRm9jdXNlZCkge1xuXHRcdFx0XHQvLyBpdCBoaWRlcyBpbnB1dCB2YWx1ZSB3aGVuIGl0IGlzIG5vdCBmb2N1c2VkIGFuZCB3YXMgbm90IHJlc2V0IG9uIHNlbGVjdFxuXHRcdFx0XHR2YWx1ZSA9ICcnO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLmlucHV0UHJvcHMsIHtcblx0XHRcdFx0J2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IGlzT3BlbiA/IHRoaXMuX2luc3RhbmNlUHJlZml4ICsgJy1vcHRpb24tJyArIGZvY3VzZWRPcHRpb25JbmRleCA6IHRoaXMuX2luc3RhbmNlUHJlZml4ICsgJy12YWx1ZScsXG5cdFx0XHRcdCdhcmlhLWRlc2NyaWJlZGJ5JzogdGhpcy5wcm9wc1snYXJpYS1kZXNjcmliZWRieSddLFxuXHRcdFx0XHQnYXJpYS1leHBhbmRlZCc6ICcnICsgaXNPcGVuLFxuXHRcdFx0XHQnYXJpYS1oYXNwb3B1cCc6ICcnICsgaXNPcGVuLFxuXHRcdFx0XHQnYXJpYS1sYWJlbCc6IHRoaXMucHJvcHNbJ2FyaWEtbGFiZWwnXSxcblx0XHRcdFx0J2FyaWEtbGFiZWxsZWRieSc6IHRoaXMucHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddLFxuXHRcdFx0XHQnYXJpYS1vd25zJzogYXJpYU93bnMsXG5cdFx0XHRcdGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuXHRcdFx0XHRvbkJsdXI6IHRoaXMuaGFuZGxlSW5wdXRCbHVyLFxuXHRcdFx0XHRvbkNoYW5nZTogdGhpcy5oYW5kbGVJbnB1dENoYW5nZSxcblx0XHRcdFx0b25Gb2N1czogdGhpcy5oYW5kbGVJbnB1dEZvY3VzLFxuXHRcdFx0XHRyZWY6IGZ1bmN0aW9uIHJlZihfcmVmKSB7XG5cdFx0XHRcdFx0cmV0dXJuIF90aGlzNi5pbnB1dCA9IF9yZWY7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJvbGU6ICdjb21ib2JveCcsXG5cdFx0XHRcdHJlcXVpcmVkOiB0aGlzLnN0YXRlLnJlcXVpcmVkLFxuXHRcdFx0XHR0YWJJbmRleDogdGhpcy5wcm9wcy50YWJJbmRleCxcblx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKHRoaXMucHJvcHMuaW5wdXRSZW5kZXJlcikge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9wcy5pbnB1dFJlbmRlcmVyKGlucHV0UHJvcHMpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCB8fCAhdGhpcy5wcm9wcy5zZWFyY2hhYmxlKSB7XG5cdFx0XHRcdHZhciBkaXZQcm9wcyA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHRoaXMucHJvcHMuaW5wdXRQcm9wcywgW10pO1xuXG5cblx0XHRcdFx0dmFyIF9hcmlhT3ducyA9IGNsYXNzTmFtZXMoZGVmaW5lUHJvcGVydHkoe30sIHRoaXMuX2luc3RhbmNlUHJlZml4ICsgJy1saXN0JywgaXNPcGVuKSk7XG5cdFx0XHRcdHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnLCBfZXh0ZW5kcyh7fSwgZGl2UHJvcHMsIHtcblx0XHRcdFx0XHQnYXJpYS1leHBhbmRlZCc6IGlzT3Blbixcblx0XHRcdFx0XHQnYXJpYS1vd25zJzogX2FyaWFPd25zLFxuXHRcdFx0XHRcdCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnOiBpc09wZW4gPyB0aGlzLl9pbnN0YW5jZVByZWZpeCArICctb3B0aW9uLScgKyBmb2N1c2VkT3B0aW9uSW5kZXggOiB0aGlzLl9pbnN0YW5jZVByZWZpeCArICctdmFsdWUnLFxuXHRcdFx0XHRcdCdhcmlhLWRpc2FibGVkJzogJycgKyB0aGlzLnByb3BzLmRpc2FibGVkLFxuXHRcdFx0XHRcdCdhcmlhLWxhYmVsJzogdGhpcy5wcm9wc1snYXJpYS1sYWJlbCddLFxuXHRcdFx0XHRcdCdhcmlhLWxhYmVsbGVkYnknOiB0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSxcblx0XHRcdFx0XHRjbGFzc05hbWU6IGNsYXNzTmFtZSxcblx0XHRcdFx0XHRvbkJsdXI6IHRoaXMuaGFuZGxlSW5wdXRCbHVyLFxuXHRcdFx0XHRcdG9uRm9jdXM6IHRoaXMuaGFuZGxlSW5wdXRGb2N1cyxcblx0XHRcdFx0XHRyZWY6IGZ1bmN0aW9uIHJlZihfcmVmMikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIF90aGlzNi5pbnB1dCA9IF9yZWYyO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cm9sZTogJ2NvbWJvYm94Jyxcblx0XHRcdFx0XHRzdHlsZTogeyBib3JkZXI6IDAsIHdpZHRoOiAxLCBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyB9LFxuXHRcdFx0XHRcdHRhYkluZGV4OiB0aGlzLnByb3BzLnRhYkluZGV4IHx8IDBcblx0XHRcdFx0fSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5wcm9wcy5hdXRvc2l6ZSkge1xuXHRcdFx0XHRyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBdXRvc2l6ZUlucHV0LCBfZXh0ZW5kcyh7IGlkOiB0aGlzLnByb3BzLmlkIH0sIGlucHV0UHJvcHMsIHsgbWluV2lkdGg6ICc1JyB9KSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdHsgY2xhc3NOYW1lOiBjbGFzc05hbWUsIGtleTogJ2lucHV0LXdyYXAnLCBzdHlsZTogeyBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyB9IH0sXG5cdFx0XHRcdFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgX2V4dGVuZHMoeyBpZDogdGhpcy5wcm9wcy5pZCB9LCBpbnB1dFByb3BzKSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyQ2xlYXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDbGVhcigpIHtcblx0XHRcdHZhciB2YWx1ZUFycmF5ID0gdGhpcy5nZXRWYWx1ZUFycmF5KHRoaXMucHJvcHMudmFsdWUpO1xuXHRcdFx0aWYgKCF0aGlzLnByb3BzLmNsZWFyYWJsZSB8fCAhdmFsdWVBcnJheS5sZW5ndGggfHwgdGhpcy5wcm9wcy5kaXNhYmxlZCB8fCB0aGlzLnByb3BzLmlzTG9hZGluZykgcmV0dXJuO1xuXHRcdFx0dmFyIGFyaWFMYWJlbCA9IHRoaXMucHJvcHMubXVsdGkgPyB0aGlzLnByb3BzLmNsZWFyQWxsVGV4dCA6IHRoaXMucHJvcHMuY2xlYXJWYWx1ZVRleHQ7XG5cdFx0XHR2YXIgY2xlYXIgPSB0aGlzLnByb3BzLmNsZWFyUmVuZGVyZXIoKTtcblxuXHRcdFx0cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdCdzcGFuJyxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdCdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuXHRcdFx0XHRcdGNsYXNzTmFtZTogJ1NlbGVjdC1jbGVhci16b25lJyxcblx0XHRcdFx0XHRvbk1vdXNlRG93bjogdGhpcy5jbGVhclZhbHVlLFxuXHRcdFx0XHRcdG9uVG91Y2hFbmQ6IHRoaXMuaGFuZGxlVG91Y2hFbmRDbGVhclZhbHVlLFxuXHRcdFx0XHRcdG9uVG91Y2hNb3ZlOiB0aGlzLmhhbmRsZVRvdWNoTW92ZSxcblx0XHRcdFx0XHRvblRvdWNoU3RhcnQ6IHRoaXMuaGFuZGxlVG91Y2hTdGFydCxcblx0XHRcdFx0XHR0aXRsZTogYXJpYUxhYmVsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNsZWFyXG5cdFx0XHQpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3JlbmRlckFycm93Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQXJyb3coKSB7XG5cdFx0XHRpZiAoIXRoaXMucHJvcHMuYXJyb3dSZW5kZXJlcikgcmV0dXJuO1xuXG5cdFx0XHR2YXIgb25Nb3VzZURvd24gPSB0aGlzLmhhbmRsZU1vdXNlRG93bk9uQXJyb3c7XG5cdFx0XHR2YXIgaXNPcGVuID0gdGhpcy5zdGF0ZS5pc09wZW47XG5cdFx0XHR2YXIgYXJyb3cgPSB0aGlzLnByb3BzLmFycm93UmVuZGVyZXIoeyBvbk1vdXNlRG93bjogb25Nb3VzZURvd24sIGlzT3BlbjogaXNPcGVuIH0pO1xuXG5cdFx0XHRpZiAoIWFycm93KSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J3NwYW4nLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2xhc3NOYW1lOiAnU2VsZWN0LWFycm93LXpvbmUnLFxuXHRcdFx0XHRcdG9uTW91c2VEb3duOiBvbk1vdXNlRG93blxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcnJvd1xuXHRcdFx0KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdmaWx0ZXJPcHRpb25zJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZmlsdGVyT3B0aW9ucyQkMShleGNsdWRlT3B0aW9ucykge1xuXHRcdFx0dmFyIGZpbHRlclZhbHVlID0gdGhpcy5zdGF0ZS5pbnB1dFZhbHVlO1xuXHRcdFx0dmFyIG9wdGlvbnMgPSB0aGlzLnByb3BzLm9wdGlvbnMgfHwgW107XG5cdFx0XHRpZiAodGhpcy5wcm9wcy5maWx0ZXJPcHRpb25zKSB7XG5cdFx0XHRcdC8vIE1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggYm9vbGVhbiBhdHRyaWJ1dGVcblx0XHRcdFx0dmFyIGZpbHRlck9wdGlvbnMkJDEgPSB0eXBlb2YgdGhpcy5wcm9wcy5maWx0ZXJPcHRpb25zID09PSAnZnVuY3Rpb24nID8gdGhpcy5wcm9wcy5maWx0ZXJPcHRpb25zIDogZmlsdGVyT3B0aW9ucztcblxuXHRcdFx0XHRyZXR1cm4gZmlsdGVyT3B0aW9ucyQkMShvcHRpb25zLCBmaWx0ZXJWYWx1ZSwgZXhjbHVkZU9wdGlvbnMsIHtcblx0XHRcdFx0XHRmaWx0ZXJPcHRpb246IHRoaXMucHJvcHMuZmlsdGVyT3B0aW9uLFxuXHRcdFx0XHRcdGlnbm9yZUFjY2VudHM6IHRoaXMucHJvcHMuaWdub3JlQWNjZW50cyxcblx0XHRcdFx0XHRpZ25vcmVDYXNlOiB0aGlzLnByb3BzLmlnbm9yZUNhc2UsXG5cdFx0XHRcdFx0bGFiZWxLZXk6IHRoaXMucHJvcHMubGFiZWxLZXksXG5cdFx0XHRcdFx0bWF0Y2hQb3M6IHRoaXMucHJvcHMubWF0Y2hQb3MsXG5cdFx0XHRcdFx0bWF0Y2hQcm9wOiB0aGlzLnByb3BzLm1hdGNoUHJvcCxcblx0XHRcdFx0XHR0cmltRmlsdGVyOiB0aGlzLnByb3BzLnRyaW1GaWx0ZXIsXG5cdFx0XHRcdFx0dmFsdWVLZXk6IHRoaXMucHJvcHMudmFsdWVLZXlcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gb3B0aW9ucztcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdvbk9wdGlvblJlZicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIG9uT3B0aW9uUmVmKHJlZiwgaXNGb2N1c2VkKSB7XG5cdFx0XHRpZiAoaXNGb2N1c2VkKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXNlZCA9IHJlZjtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXJNZW51Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTWVudShvcHRpb25zLCB2YWx1ZUFycmF5LCBmb2N1c2VkT3B0aW9uKSB7XG5cdFx0XHRpZiAob3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9wcy5tZW51UmVuZGVyZXIoe1xuXHRcdFx0XHRcdGZvY3VzZWRPcHRpb246IGZvY3VzZWRPcHRpb24sXG5cdFx0XHRcdFx0Zm9jdXNPcHRpb246IHRoaXMuZm9jdXNPcHRpb24sXG5cdFx0XHRcdFx0aW5wdXRWYWx1ZTogdGhpcy5zdGF0ZS5pbnB1dFZhbHVlLFxuXHRcdFx0XHRcdGluc3RhbmNlUHJlZml4OiB0aGlzLl9pbnN0YW5jZVByZWZpeCxcblx0XHRcdFx0XHRsYWJlbEtleTogdGhpcy5wcm9wcy5sYWJlbEtleSxcblx0XHRcdFx0XHRvbkZvY3VzOiB0aGlzLmZvY3VzT3B0aW9uLFxuXHRcdFx0XHRcdG9uT3B0aW9uUmVmOiB0aGlzLm9uT3B0aW9uUmVmLFxuXHRcdFx0XHRcdG9uU2VsZWN0OiB0aGlzLnNlbGVjdFZhbHVlLFxuXHRcdFx0XHRcdG9wdGlvbkNsYXNzTmFtZTogdGhpcy5wcm9wcy5vcHRpb25DbGFzc05hbWUsXG5cdFx0XHRcdFx0b3B0aW9uQ29tcG9uZW50OiB0aGlzLnByb3BzLm9wdGlvbkNvbXBvbmVudCxcblx0XHRcdFx0XHRvcHRpb25SZW5kZXJlcjogdGhpcy5wcm9wcy5vcHRpb25SZW5kZXJlciB8fCB0aGlzLmdldE9wdGlvbkxhYmVsLFxuXHRcdFx0XHRcdG9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRcdFx0cmVtb3ZlVmFsdWU6IHRoaXMucmVtb3ZlVmFsdWUsXG5cdFx0XHRcdFx0c2VsZWN0VmFsdWU6IHRoaXMuc2VsZWN0VmFsdWUsXG5cdFx0XHRcdFx0dmFsdWVBcnJheTogdmFsdWVBcnJheSxcblx0XHRcdFx0XHR2YWx1ZUtleTogdGhpcy5wcm9wcy52YWx1ZUtleVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5wcm9wcy5ub1Jlc3VsdHNUZXh0KSB7XG5cdFx0XHRcdHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdHsgY2xhc3NOYW1lOiAnU2VsZWN0LW5vcmVzdWx0cycgfSxcblx0XHRcdFx0XHR0aGlzLnByb3BzLm5vUmVzdWx0c1RleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3JlbmRlckhpZGRlbkZpZWxkJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVySGlkZGVuRmllbGQodmFsdWVBcnJheSkge1xuXHRcdFx0dmFyIF90aGlzNyA9IHRoaXM7XG5cblx0XHRcdGlmICghdGhpcy5wcm9wcy5uYW1lKSByZXR1cm47XG5cdFx0XHRpZiAodGhpcy5wcm9wcy5qb2luVmFsdWVzKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSA9IHZhbHVlQXJyYXkubWFwKGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0cmluZ2lmeVZhbHVlKGlbX3RoaXM3LnByb3BzLnZhbHVlS2V5XSk7XG5cdFx0XHRcdH0pLmpvaW4odGhpcy5wcm9wcy5kZWxpbWl0ZXIpO1xuXHRcdFx0XHRyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgnaW5wdXQnLCB7XG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IHRoaXMucHJvcHMuZGlzYWJsZWQsXG5cdFx0XHRcdFx0bmFtZTogdGhpcy5wcm9wcy5uYW1lLFxuXHRcdFx0XHRcdHJlZjogZnVuY3Rpb24gcmVmKF9yZWYzKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gX3RoaXM3LnZhbHVlID0gX3JlZjM7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0eXBlOiAnaGlkZGVuJyxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdmFsdWVBcnJheS5tYXAoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG5cdFx0XHRcdHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCdpbnB1dCcsIHtcblx0XHRcdFx0XHRkaXNhYmxlZDogX3RoaXM3LnByb3BzLmRpc2FibGVkLFxuXHRcdFx0XHRcdGtleTogJ2hpZGRlbi4nICsgaW5kZXgsXG5cdFx0XHRcdFx0bmFtZTogX3RoaXM3LnByb3BzLm5hbWUsXG5cdFx0XHRcdFx0cmVmOiAndmFsdWUnICsgaW5kZXgsXG5cdFx0XHRcdFx0dHlwZTogJ2hpZGRlbicsXG5cdFx0XHRcdFx0dmFsdWU6IHN0cmluZ2lmeVZhbHVlKGl0ZW1bX3RoaXM3LnByb3BzLnZhbHVlS2V5XSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdnZXRGb2N1c2FibGVPcHRpb25JbmRleCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldEZvY3VzYWJsZU9wdGlvbkluZGV4KHNlbGVjdGVkT3B0aW9uKSB7XG5cdFx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuX3Zpc2libGVPcHRpb25zO1xuXHRcdFx0aWYgKCFvcHRpb25zLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cblx0XHRcdHZhciB2YWx1ZUtleSA9IHRoaXMucHJvcHMudmFsdWVLZXk7XG5cdFx0XHR2YXIgZm9jdXNlZE9wdGlvbiA9IHRoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbiB8fCBzZWxlY3RlZE9wdGlvbjtcblx0XHRcdGlmIChmb2N1c2VkT3B0aW9uICYmICFmb2N1c2VkT3B0aW9uLmRpc2FibGVkKSB7XG5cdFx0XHRcdHZhciBmb2N1c2VkT3B0aW9uSW5kZXggPSAtMTtcblx0XHRcdFx0b3B0aW9ucy5zb21lKGZ1bmN0aW9uIChvcHRpb24sIGluZGV4KSB7XG5cdFx0XHRcdFx0dmFyIGlzT3B0aW9uRXF1YWwgPSBvcHRpb25bdmFsdWVLZXldID09PSBmb2N1c2VkT3B0aW9uW3ZhbHVlS2V5XTtcblx0XHRcdFx0XHRpZiAoaXNPcHRpb25FcXVhbCkge1xuXHRcdFx0XHRcdFx0Zm9jdXNlZE9wdGlvbkluZGV4ID0gaW5kZXg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBpc09wdGlvbkVxdWFsO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGZvY3VzZWRPcHRpb25JbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0XHRyZXR1cm4gZm9jdXNlZE9wdGlvbkluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoIW9wdGlvbnNbaV0uZGlzYWJsZWQpIHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyT3V0ZXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJPdXRlcihvcHRpb25zLCB2YWx1ZUFycmF5LCBmb2N1c2VkT3B0aW9uKSB7XG5cdFx0XHR2YXIgX3RoaXM4ID0gdGhpcztcblxuXHRcdFx0dmFyIG1lbnUgPSB0aGlzLnJlbmRlck1lbnUob3B0aW9ucywgdmFsdWVBcnJheSwgZm9jdXNlZE9wdGlvbik7XG5cdFx0XHRpZiAoIW1lbnUpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0eyByZWY6IGZ1bmN0aW9uIHJlZihfcmVmNSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIF90aGlzOC5tZW51Q29udGFpbmVyID0gX3JlZjU7XG5cdFx0XHRcdFx0fSwgY2xhc3NOYW1lOiAnU2VsZWN0LW1lbnUtb3V0ZXInLCBzdHlsZTogdGhpcy5wcm9wcy5tZW51Q29udGFpbmVyU3R5bGUgfSxcblx0XHRcdFx0UmVhY3QuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU6ICdTZWxlY3QtbWVudScsXG5cdFx0XHRcdFx0XHRpZDogdGhpcy5faW5zdGFuY2VQcmVmaXggKyAnLWxpc3QnLFxuXHRcdFx0XHRcdFx0b25Nb3VzZURvd246IHRoaXMuaGFuZGxlTW91c2VEb3duT25NZW51LFxuXHRcdFx0XHRcdFx0b25TY3JvbGw6IHRoaXMuaGFuZGxlTWVudVNjcm9sbCxcblx0XHRcdFx0XHRcdHJlZjogZnVuY3Rpb24gcmVmKF9yZWY0KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBfdGhpczgubWVudSA9IF9yZWY0O1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHJvbGU6ICdsaXN0Ym94Jyxcblx0XHRcdFx0XHRcdHN0eWxlOiB0aGlzLnByb3BzLm1lbnVTdHlsZSxcblx0XHRcdFx0XHRcdHRhYkluZGV4OiAtMVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bWVudVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3JlbmRlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBfdGhpczkgPSB0aGlzO1xuXG5cdFx0XHR2YXIgdmFsdWVBcnJheSA9IHRoaXMuZ2V0VmFsdWVBcnJheSh0aGlzLnByb3BzLnZhbHVlKTtcblx0XHRcdHZhciBvcHRpb25zID0gdGhpcy5fdmlzaWJsZU9wdGlvbnMgPSB0aGlzLmZpbHRlck9wdGlvbnModGhpcy5wcm9wcy5tdWx0aSAmJiB0aGlzLnByb3BzLnJlbW92ZVNlbGVjdGVkID8gdmFsdWVBcnJheSA6IG51bGwpO1xuXHRcdFx0dmFyIGlzT3BlbiA9IHRoaXMuc3RhdGUuaXNPcGVuO1xuXHRcdFx0aWYgKHRoaXMucHJvcHMubXVsdGkgJiYgIW9wdGlvbnMubGVuZ3RoICYmIHZhbHVlQXJyYXkubGVuZ3RoICYmICF0aGlzLnN0YXRlLmlucHV0VmFsdWUpIGlzT3BlbiA9IGZhbHNlO1xuXHRcdFx0dmFyIGZvY3VzZWRPcHRpb25JbmRleCA9IHRoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9uSW5kZXgodmFsdWVBcnJheVswXSk7XG5cblx0XHRcdHZhciBmb2N1c2VkT3B0aW9uID0gbnVsbDtcblx0XHRcdGlmIChmb2N1c2VkT3B0aW9uSW5kZXggIT09IG51bGwpIHtcblx0XHRcdFx0Zm9jdXNlZE9wdGlvbiA9IHRoaXMuX2ZvY3VzZWRPcHRpb24gPSBvcHRpb25zW2ZvY3VzZWRPcHRpb25JbmRleF07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb2N1c2VkT3B0aW9uID0gdGhpcy5fZm9jdXNlZE9wdGlvbiA9IG51bGw7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY2xhc3NOYW1lID0gY2xhc3NOYW1lcygnU2VsZWN0JywgdGhpcy5wcm9wcy5jbGFzc05hbWUsIHtcblx0XHRcdFx0J2hhcy12YWx1ZSc6IHZhbHVlQXJyYXkubGVuZ3RoLFxuXHRcdFx0XHQnaXMtY2xlYXJhYmxlJzogdGhpcy5wcm9wcy5jbGVhcmFibGUsXG5cdFx0XHRcdCdpcy1kaXNhYmxlZCc6IHRoaXMucHJvcHMuZGlzYWJsZWQsXG5cdFx0XHRcdCdpcy1mb2N1c2VkJzogdGhpcy5zdGF0ZS5pc0ZvY3VzZWQsXG5cdFx0XHRcdCdpcy1sb2FkaW5nJzogdGhpcy5wcm9wcy5pc0xvYWRpbmcsXG5cdFx0XHRcdCdpcy1vcGVuJzogaXNPcGVuLFxuXHRcdFx0XHQnaXMtcHNldWRvLWZvY3VzZWQnOiB0aGlzLnN0YXRlLmlzUHNldWRvRm9jdXNlZCxcblx0XHRcdFx0J2lzLXNlYXJjaGFibGUnOiB0aGlzLnByb3BzLnNlYXJjaGFibGUsXG5cdFx0XHRcdCdTZWxlY3QtLW11bHRpJzogdGhpcy5wcm9wcy5tdWx0aSxcblx0XHRcdFx0J1NlbGVjdC0tcnRsJzogdGhpcy5wcm9wcy5ydGwsXG5cdFx0XHRcdCdTZWxlY3QtLXNpbmdsZSc6ICF0aGlzLnByb3BzLm11bHRpXG5cdFx0XHR9KTtcblxuXHRcdFx0dmFyIHJlbW92ZU1lc3NhZ2UgPSBudWxsO1xuXHRcdFx0aWYgKHRoaXMucHJvcHMubXVsdGkgJiYgIXRoaXMucHJvcHMuZGlzYWJsZWQgJiYgdmFsdWVBcnJheS5sZW5ndGggJiYgIXRoaXMuc3RhdGUuaW5wdXRWYWx1ZSAmJiB0aGlzLnN0YXRlLmlzRm9jdXNlZCAmJiB0aGlzLnByb3BzLmJhY2tzcGFjZVJlbW92ZXMpIHtcblx0XHRcdFx0cmVtb3ZlTWVzc2FnZSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0J3NwYW4nLFxuXHRcdFx0XHRcdHsgaWQ6IHRoaXMuX2luc3RhbmNlUHJlZml4ICsgJy1iYWNrc3BhY2UtcmVtb3ZlLW1lc3NhZ2UnLCBjbGFzc05hbWU6ICdTZWxlY3QtYXJpYS1vbmx5JywgJ2FyaWEtbGl2ZSc6ICdhc3NlcnRpdmUnIH0sXG5cdFx0XHRcdFx0dGhpcy5wcm9wcy5iYWNrc3BhY2VUb1JlbW92ZU1lc3NhZ2UucmVwbGFjZSgne2xhYmVsfScsIHZhbHVlQXJyYXlbdmFsdWVBcnJheS5sZW5ndGggLSAxXVt0aGlzLnByb3BzLmxhYmVsS2V5XSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHR7IHJlZjogZnVuY3Rpb24gcmVmKF9yZWY3KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gX3RoaXM5LndyYXBwZXIgPSBfcmVmNztcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuXHRcdFx0XHRcdHN0eWxlOiB0aGlzLnByb3BzLndyYXBwZXJTdHlsZSB9LFxuXHRcdFx0XHR0aGlzLnJlbmRlckhpZGRlbkZpZWxkKHZhbHVlQXJyYXkpLFxuXHRcdFx0XHRSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdHsgcmVmOiBmdW5jdGlvbiByZWYoX3JlZjYpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIF90aGlzOS5jb250cm9sID0gX3JlZjY7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lOiAnU2VsZWN0LWNvbnRyb2wnLFxuXHRcdFx0XHRcdFx0b25LZXlEb3duOiB0aGlzLmhhbmRsZUtleURvd24sXG5cdFx0XHRcdFx0XHRvbk1vdXNlRG93bjogdGhpcy5oYW5kbGVNb3VzZURvd24sXG5cdFx0XHRcdFx0XHRvblRvdWNoRW5kOiB0aGlzLmhhbmRsZVRvdWNoRW5kLFxuXHRcdFx0XHRcdFx0b25Ub3VjaE1vdmU6IHRoaXMuaGFuZGxlVG91Y2hNb3ZlLFxuXHRcdFx0XHRcdFx0b25Ub3VjaFN0YXJ0OiB0aGlzLmhhbmRsZVRvdWNoU3RhcnQsXG5cdFx0XHRcdFx0XHRzdHlsZTogdGhpcy5wcm9wcy5zdHlsZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0UmVhY3QuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdCdzcGFuJyxcblx0XHRcdFx0XHRcdHsgY2xhc3NOYW1lOiAnU2VsZWN0LW11bHRpLXZhbHVlLXdyYXBwZXInLCBpZDogdGhpcy5faW5zdGFuY2VQcmVmaXggKyAnLXZhbHVlJyB9LFxuXHRcdFx0XHRcdFx0dGhpcy5yZW5kZXJWYWx1ZSh2YWx1ZUFycmF5LCBpc09wZW4pLFxuXHRcdFx0XHRcdFx0dGhpcy5yZW5kZXJJbnB1dCh2YWx1ZUFycmF5LCBmb2N1c2VkT3B0aW9uSW5kZXgpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRyZW1vdmVNZXNzYWdlLFxuXHRcdFx0XHRcdHRoaXMucmVuZGVyTG9hZGluZygpLFxuXHRcdFx0XHRcdHRoaXMucmVuZGVyQ2xlYXIoKSxcblx0XHRcdFx0XHR0aGlzLnJlbmRlckFycm93KClcblx0XHRcdFx0KSxcblx0XHRcdFx0aXNPcGVuID8gdGhpcy5yZW5kZXJPdXRlcihvcHRpb25zLCB2YWx1ZUFycmF5LCBmb2N1c2VkT3B0aW9uKSA6IG51bGxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cdHJldHVybiBTZWxlY3Q7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblNlbGVjdCQxLnByb3BUeXBlcyA9IHtcblx0J2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLCAvLyBodG1sIGlkKHMpIG9mIGVsZW1lbnQocykgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBkZXNjcmliZSB0aGlzIGlucHV0IChmb3IgYXNzaXN0aXZlIHRlY2gpXG5cdCdhcmlhLWxhYmVsJzogUHJvcFR5cGVzLnN0cmluZywgLy8gYXJpYSBsYWJlbCAoZm9yIGFzc2lzdGl2ZSB0ZWNoKVxuXHQnYXJpYS1sYWJlbGxlZGJ5JzogUHJvcFR5cGVzLnN0cmluZywgLy8gaHRtbCBpZCBvZiBhbiBlbGVtZW50IHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGxhYmVsIChmb3IgYXNzaXN0aXZlIHRlY2gpXG5cdGFycm93UmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLCAvLyBjcmVhdGUgdGhlIGRyb3AtZG93biBjYXJldCBlbGVtZW50XG5cdGF1dG9CbHVyOiBQcm9wVHlwZXMuYm9vbCwgLy8gYXV0b21hdGljYWxseSBibHVyIHRoZSBjb21wb25lbnQgd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWRcblx0YXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCwgLy8gYXV0b2ZvY3VzIHRoZSBjb21wb25lbnQgb24gbW91bnRcblx0YXV0b2ZvY3VzOiBQcm9wVHlwZXMuYm9vbCwgLy8gZGVwcmVjYXRlZDsgdXNlIGF1dG9Gb2N1cyBpbnN0ZWFkXG5cdGF1dG9zaXplOiBQcm9wVHlwZXMuYm9vbCwgLy8gd2hldGhlciB0byBlbmFibGUgYXV0b3NpemluZyBvciBub3Rcblx0YmFja3NwYWNlUmVtb3ZlczogUHJvcFR5cGVzLmJvb2wsIC8vIHdoZXRoZXIgYmFja3NwYWNlIHJlbW92ZXMgYW4gaXRlbSBpZiB0aGVyZSBpcyBubyB0ZXh0IGlucHV0XG5cdGJhY2tzcGFjZVRvUmVtb3ZlTWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZywgLy8gbWVzc2FnZSB0byB1c2UgZm9yIHNjcmVlbnJlYWRlcnMgdG8gcHJlc3MgYmFja3NwYWNlIHRvIHJlbW92ZSB0aGUgY3VycmVudCBpdGVtIC0ge2xhYmVsfSBpcyByZXBsYWNlZCB3aXRoIHRoZSBpdGVtIGxhYmVsXG5cdGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZywgLy8gY2xhc3NOYW1lIGZvciB0aGUgb3V0ZXIgZWxlbWVudFxuXHRjbGVhckFsbFRleHQ6IHN0cmluZ09yTm9kZSwgLy8gdGl0bGUgZm9yIHRoZSBcImNsZWFyXCIgY29udHJvbCB3aGVuIG11bHRpOiB0cnVlXG5cdGNsZWFyUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLCAvLyBjcmVhdGUgY2xlYXJhYmxlIHggZWxlbWVudFxuXHRjbGVhclZhbHVlVGV4dDogc3RyaW5nT3JOb2RlLCAvLyB0aXRsZSBmb3IgdGhlIFwiY2xlYXJcIiBjb250cm9sXG5cdGNsZWFyYWJsZTogUHJvcFR5cGVzLmJvb2wsIC8vIHNob3VsZCBpdCBiZSBwb3NzaWJsZSB0byByZXNldCB2YWx1ZVxuXHRjbG9zZU9uU2VsZWN0OiBQcm9wVHlwZXMuYm9vbCwgLy8gd2hldGhlciB0byBjbG9zZSB0aGUgbWVudSB3aGVuIGEgdmFsdWUgaXMgc2VsZWN0ZWRcblx0ZGVsZXRlUmVtb3ZlczogUHJvcFR5cGVzLmJvb2wsIC8vIHdoZXRoZXIgZGVsZXRlIHJlbW92ZXMgYW4gaXRlbSBpZiB0aGVyZSBpcyBubyB0ZXh0IGlucHV0XG5cdGRlbGltaXRlcjogUHJvcFR5cGVzLnN0cmluZywgLy8gZGVsaW1pdGVyIHRvIHVzZSB0byBqb2luIG11bHRpcGxlIHZhbHVlcyBmb3IgdGhlIGhpZGRlbiBmaWVsZCB2YWx1ZVxuXHRkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsIC8vIHdoZXRoZXIgdGhlIFNlbGVjdCBpcyBkaXNhYmxlZCBvciBub3Rcblx0ZXNjYXBlQ2xlYXJzVmFsdWU6IFByb3BUeXBlcy5ib29sLCAvLyB3aGV0aGVyIGVzY2FwZSBjbGVhcnMgdGhlIHZhbHVlIHdoZW4gdGhlIG1lbnUgaXMgY2xvc2VkXG5cdGZpbHRlck9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsIC8vIG1ldGhvZCB0byBmaWx0ZXIgYSBzaW5nbGUgb3B0aW9uIChvcHRpb24sIGZpbHRlclN0cmluZylcblx0ZmlsdGVyT3B0aW9uczogUHJvcFR5cGVzLmFueSwgLy8gYm9vbGVhbiB0byBlbmFibGUgZGVmYXVsdCBmaWx0ZXJpbmcgb3IgZnVuY3Rpb24gdG8gZmlsdGVyIHRoZSBvcHRpb25zIGFycmF5IChbb3B0aW9uc10sIGZpbHRlclN0cmluZywgW3ZhbHVlc10pXG5cdGlkOiBQcm9wVHlwZXMuc3RyaW5nLCAvLyBodG1sIGlkIHRvIHNldCBvbiB0aGUgaW5wdXQgZWxlbWVudCBmb3IgYWNjZXNzaWJpbGl0eSBvciB0ZXN0c1xuXHRpZ25vcmVBY2NlbnRzOiBQcm9wVHlwZXMuYm9vbCwgLy8gd2hldGhlciB0byBzdHJpcCBkaWFjcml0aWNzIHdoZW4gZmlsdGVyaW5nXG5cdGlnbm9yZUNhc2U6IFByb3BUeXBlcy5ib29sLCAvLyB3aGV0aGVyIHRvIHBlcmZvcm0gY2FzZS1pbnNlbnNpdGl2ZSBmaWx0ZXJpbmdcblx0aW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCwgLy8gY3VzdG9tIGF0dHJpYnV0ZXMgZm9yIHRoZSBJbnB1dFxuXHRpbnB1dFJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYywgLy8gcmV0dXJucyBhIGN1c3RvbSBpbnB1dCBjb21wb25lbnRcblx0aW5zdGFuY2VJZDogUHJvcFR5cGVzLnN0cmluZywgLy8gc2V0IHRoZSBjb21wb25lbnRzIGluc3RhbmNlSWRcblx0aXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCwgLy8gd2hldGhlciB0aGUgU2VsZWN0IGlzIGxvYWRpbmcgZXh0ZXJuYWxseSBvciBub3QgKHN1Y2ggYXMgb3B0aW9ucyBiZWluZyBsb2FkZWQpXG5cdGpvaW5WYWx1ZXM6IFByb3BUeXBlcy5ib29sLCAvLyBqb2lucyBtdWx0aXBsZSB2YWx1ZXMgaW50byBhIHNpbmdsZSBmb3JtIGZpZWxkIHdpdGggdGhlIGRlbGltaXRlciAobGVnYWN5IG1vZGUpXG5cdGxhYmVsS2V5OiBQcm9wVHlwZXMuc3RyaW5nLCAvLyBwYXRoIG9mIHRoZSBsYWJlbCB2YWx1ZSBpbiBvcHRpb24gb2JqZWN0c1xuXHRtYXRjaFBvczogUHJvcFR5cGVzLnN0cmluZywgLy8gKGFueXxzdGFydCkgbWF0Y2ggdGhlIHN0YXJ0IG9yIGVudGlyZSBzdHJpbmcgd2hlbiBmaWx0ZXJpbmdcblx0bWF0Y2hQcm9wOiBQcm9wVHlwZXMuc3RyaW5nLCAvLyAoYW55fGxhYmVsfHZhbHVlKSB3aGljaCBvcHRpb24gcHJvcGVydHkgdG8gZmlsdGVyIG9uXG5cdG1lbnVCdWZmZXI6IFByb3BUeXBlcy5udW1iZXIsIC8vIG9wdGlvbmFsIGJ1ZmZlciAoaW4gcHgpIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgdmlld3BvcnQgYW5kIHRoZSBib3R0b20gb2YgdGhlIG1lbnVcblx0bWVudUNvbnRhaW5lclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LCAvLyBvcHRpb25hbCBzdHlsZSB0byBhcHBseSB0byB0aGUgbWVudSBjb250YWluZXJcblx0bWVudVJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYywgLy8gcmVuZGVycyBhIGN1c3RvbSBtZW51IHdpdGggb3B0aW9uc1xuXHRtZW51U3R5bGU6IFByb3BUeXBlcy5vYmplY3QsIC8vIG9wdGlvbmFsIHN0eWxlIHRvIGFwcGx5IHRvIHRoZSBtZW51XG5cdG11bHRpOiBQcm9wVHlwZXMuYm9vbCwgLy8gbXVsdGktdmFsdWUgaW5wdXRcblx0bmFtZTogUHJvcFR5cGVzLnN0cmluZywgLy8gZ2VuZXJhdGVzIGEgaGlkZGVuIDxpbnB1dCAvPiB0YWcgd2l0aCB0aGlzIGZpZWxkIG5hbWUgZm9yIGh0bWwgZm9ybXNcblx0bm9SZXN1bHRzVGV4dDogc3RyaW5nT3JOb2RlLCAvLyBwbGFjZWhvbGRlciBkaXNwbGF5ZWQgd2hlbiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgc2VhcmNoIHJlc3VsdHNcblx0b25CbHVyOiBQcm9wVHlwZXMuZnVuYywgLy8gb25CbHVyIGhhbmRsZXI6IGZ1bmN0aW9uIChldmVudCkge31cblx0b25CbHVyUmVzZXRzSW5wdXQ6IFByb3BUeXBlcy5ib29sLCAvLyB3aGV0aGVyIGlucHV0IGlzIGNsZWFyZWQgb24gYmx1clxuXHRvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsIC8vIG9uQ2hhbmdlIGhhbmRsZXI6IGZ1bmN0aW9uIChuZXdWYWx1ZSkge31cblx0b25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsIC8vIGZpcmVzIHdoZW4gdGhlIG1lbnUgaXMgY2xvc2VkXG5cdG9uQ2xvc2VSZXNldHNJbnB1dDogUHJvcFR5cGVzLmJvb2wsIC8vIHdoZXRoZXIgaW5wdXQgaXMgY2xlYXJlZCB3aGVuIG1lbnUgaXMgY2xvc2VkIHRocm91Z2ggdGhlIGFycm93XG5cdG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLCAvLyBvbkZvY3VzIGhhbmRsZXI6IGZ1bmN0aW9uIChldmVudCkge31cblx0b25JbnB1dENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsIC8vIG9uSW5wdXRDaGFuZ2UgaGFuZGxlcjogZnVuY3Rpb24gKGlucHV0VmFsdWUpIHt9XG5cdG9uSW5wdXRLZXlEb3duOiBQcm9wVHlwZXMuZnVuYywgLy8gaW5wdXQga2V5RG93biBoYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpIHt9XG5cdG9uTWVudVNjcm9sbFRvQm90dG9tOiBQcm9wVHlwZXMuZnVuYywgLy8gZmlyZXMgd2hlbiB0aGUgbWVudSBpcyBzY3JvbGxlZCB0byB0aGUgYm90dG9tOyBjYW4gYmUgdXNlZCB0byBwYWdpbmF0ZSBvcHRpb25zXG5cdG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsIC8vIGZpcmVzIHdoZW4gdGhlIG1lbnUgaXMgb3BlbmVkXG5cdG9uU2VsZWN0UmVzZXRzSW5wdXQ6IFByb3BUeXBlcy5ib29sLCAvLyB3aGV0aGVyIGlucHV0IGlzIGNsZWFyZWQgb24gc2VsZWN0ICh3b3JrcyBvbmx5IGZvciBtdWx0aXNlbGVjdClcblx0b25WYWx1ZUNsaWNrOiBQcm9wVHlwZXMuZnVuYywgLy8gb25DbGljayBoYW5kbGVyIGZvciB2YWx1ZSBsYWJlbHM6IGZ1bmN0aW9uICh2YWx1ZSwgZXZlbnQpIHt9XG5cdG9wZW5PbkNsaWNrOiBQcm9wVHlwZXMuYm9vbCwgLy8gYm9vbGVhbiB0byBjb250cm9sIG9wZW5pbmcgdGhlIG1lbnUgd2hlbiB0aGUgY29udHJvbCBpcyBjbGlja2VkXG5cdG9wZW5PbkZvY3VzOiBQcm9wVHlwZXMuYm9vbCwgLy8gYWx3YXlzIG9wZW4gb3B0aW9ucyBtZW51IG9uIGZvY3VzXG5cdG9wdGlvbkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZywgLy8gYWRkaXRpb25hbCBjbGFzcyhlcykgdG8gYXBwbHkgdG8gdGhlIDxPcHRpb24gLz4gZWxlbWVudHNcblx0b3B0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZnVuYywgLy8gb3B0aW9uIGNvbXBvbmVudCB0byByZW5kZXIgaW4gZHJvcGRvd25cblx0b3B0aW9uUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLCAvLyBvcHRpb25SZW5kZXJlcjogZnVuY3Rpb24gKG9wdGlvbikge31cblx0b3B0aW9uczogUHJvcFR5cGVzLmFycmF5LCAvLyBhcnJheSBvZiBvcHRpb25zXG5cdHBhZ2VTaXplOiBQcm9wVHlwZXMubnVtYmVyLCAvLyBudW1iZXIgb2YgZW50cmllcyB0byBwYWdlIHdoZW4gdXNpbmcgcGFnZSB1cC9kb3duIGtleXNcblx0cGxhY2Vob2xkZXI6IHN0cmluZ09yTm9kZSwgLy8gZmllbGQgcGxhY2Vob2xkZXIsIGRpc3BsYXllZCB3aGVuIHRoZXJlJ3Mgbm8gdmFsdWVcblx0cmVtb3ZlU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLCAvLyB3aGV0aGVyIHRoZSBzZWxlY3RlZCBvcHRpb24gaXMgcmVtb3ZlZCBmcm9tIHRoZSBkcm9wZG93biBvbiBtdWx0aSBzZWxlY3RzXG5cdHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCwgLy8gYXBwbGllcyBIVE1MNSByZXF1aXJlZCBhdHRyaWJ1dGUgd2hlbiBuZWVkZWRcblx0cmVzZXRWYWx1ZTogUHJvcFR5cGVzLmFueSwgLy8gdmFsdWUgdG8gdXNlIHdoZW4geW91IGNsZWFyIHRoZSBjb250cm9sXG5cdHJ0bDogUHJvcFR5cGVzLmJvb2wsIC8vIHNldCB0byB0cnVlIGluIG9yZGVyIHRvIHVzZSByZWFjdC1zZWxlY3QgaW4gcmlnaHQtdG8tbGVmdCBkaXJlY3Rpb25cblx0c2Nyb2xsTWVudUludG9WaWV3OiBQcm9wVHlwZXMuYm9vbCwgLy8gYm9vbGVhbiB0byBlbmFibGUgdGhlIHZpZXdwb3J0IHRvIHNoaWZ0IHNvIHRoYXQgdGhlIGZ1bGwgbWVudSBmdWxseSB2aXNpYmxlIHdoZW4gZW5nYWdlZFxuXHRzZWFyY2hhYmxlOiBQcm9wVHlwZXMuYm9vbCwgLy8gd2hldGhlciB0byBlbmFibGUgc2VhcmNoaW5nIGZlYXR1cmUgb3Igbm90XG5cdHNpbXBsZVZhbHVlOiBQcm9wVHlwZXMuYm9vbCwgLy8gcGFzcyB0aGUgdmFsdWUgdG8gb25DaGFuZ2UgYXMgYSBzaW1wbGUgdmFsdWUgKGxlZ2FjeSBwcmUgMS4wIG1vZGUpLCBkZWZhdWx0cyB0byBmYWxzZVxuXHRzdHlsZTogUHJvcFR5cGVzLm9iamVjdCwgLy8gb3B0aW9uYWwgc3R5bGUgdG8gYXBwbHkgdG8gdGhlIGNvbnRyb2xcblx0dGFiSW5kZXg6IHN0cmluZ09yTnVtYmVyLCAvLyBvcHRpb25hbCB0YWIgaW5kZXggb2YgdGhlIGNvbnRyb2xcblx0dGFiU2VsZWN0c1ZhbHVlOiBQcm9wVHlwZXMuYm9vbCwgLy8gd2hldGhlciB0byB0cmVhdCB0YWJiaW5nIG91dCB3aGlsZSBmb2N1c2VkIHRvIGJlIHZhbHVlIHNlbGVjdGlvblxuXHR0cmltRmlsdGVyOiBQcm9wVHlwZXMuYm9vbCwgLy8gd2hldGhlciB0byB0cmltIHdoaXRlc3BhY2UgYXJvdW5kIGZpbHRlciB2YWx1ZVxuXHR2YWx1ZTogUHJvcFR5cGVzLmFueSwgLy8gaW5pdGlhbCBmaWVsZCB2YWx1ZVxuXHR2YWx1ZUNvbXBvbmVudDogUHJvcFR5cGVzLmZ1bmMsIC8vIHZhbHVlIGNvbXBvbmVudCB0byByZW5kZXJcblx0dmFsdWVLZXk6IFByb3BUeXBlcy5zdHJpbmcsIC8vIHBhdGggb2YgdGhlIGxhYmVsIHZhbHVlIGluIG9wdGlvbiBvYmplY3RzXG5cdHZhbHVlUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLCAvLyB2YWx1ZVJlbmRlcmVyOiBmdW5jdGlvbiAob3B0aW9uKSB7fVxuXHR3cmFwcGVyU3R5bGU6IFByb3BUeXBlcy5vYmplY3QgLy8gb3B0aW9uYWwgc3R5bGUgdG8gYXBwbHkgdG8gdGhlIGNvbXBvbmVudCB3cmFwcGVyXG59O1xuXG5TZWxlY3QkMS5kZWZhdWx0UHJvcHMgPSB7XG5cdGFycm93UmVuZGVyZXI6IGFycm93UmVuZGVyZXIsXG5cdGF1dG9zaXplOiB0cnVlLFxuXHRiYWNrc3BhY2VSZW1vdmVzOiB0cnVlLFxuXHRiYWNrc3BhY2VUb1JlbW92ZU1lc3NhZ2U6ICdQcmVzcyBiYWNrc3BhY2UgdG8gcmVtb3ZlIHtsYWJlbH0nLFxuXHRjbGVhcmFibGU6IHRydWUsXG5cdGNsZWFyQWxsVGV4dDogJ0NsZWFyIGFsbCcsXG5cdGNsZWFyUmVuZGVyZXI6IGNsZWFyUmVuZGVyZXIsXG5cdGNsZWFyVmFsdWVUZXh0OiAnQ2xlYXIgdmFsdWUnLFxuXHRjbG9zZU9uU2VsZWN0OiB0cnVlLFxuXHRkZWxldGVSZW1vdmVzOiB0cnVlLFxuXHRkZWxpbWl0ZXI6ICcsJyxcblx0ZGlzYWJsZWQ6IGZhbHNlLFxuXHRlc2NhcGVDbGVhcnNWYWx1ZTogdHJ1ZSxcblx0ZmlsdGVyT3B0aW9uczogZmlsdGVyT3B0aW9ucyxcblx0aWdub3JlQWNjZW50czogdHJ1ZSxcblx0aWdub3JlQ2FzZTogdHJ1ZSxcblx0aW5wdXRQcm9wczoge30sXG5cdGlzTG9hZGluZzogZmFsc2UsXG5cdGpvaW5WYWx1ZXM6IGZhbHNlLFxuXHRsYWJlbEtleTogJ2xhYmVsJyxcblx0bWF0Y2hQb3M6ICdhbnknLFxuXHRtYXRjaFByb3A6ICdhbnknLFxuXHRtZW51QnVmZmVyOiAwLFxuXHRtZW51UmVuZGVyZXI6IG1lbnVSZW5kZXJlcixcblx0bXVsdGk6IGZhbHNlLFxuXHRub1Jlc3VsdHNUZXh0OiAnTm8gcmVzdWx0cyBmb3VuZCcsXG5cdG9uQmx1clJlc2V0c0lucHV0OiB0cnVlLFxuXHRvbkNsb3NlUmVzZXRzSW5wdXQ6IHRydWUsXG5cdG9uU2VsZWN0UmVzZXRzSW5wdXQ6IHRydWUsXG5cdG9wZW5PbkNsaWNrOiB0cnVlLFxuXHRvcHRpb25Db21wb25lbnQ6IE9wdGlvbixcblx0cGFnZVNpemU6IDUsXG5cdHBsYWNlaG9sZGVyOiAnU2VsZWN0Li4uJyxcblx0cmVtb3ZlU2VsZWN0ZWQ6IHRydWUsXG5cdHJlcXVpcmVkOiBmYWxzZSxcblx0cnRsOiBmYWxzZSxcblx0c2Nyb2xsTWVudUludG9WaWV3OiB0cnVlLFxuXHRzZWFyY2hhYmxlOiB0cnVlLFxuXHRzaW1wbGVWYWx1ZTogZmFsc2UsXG5cdHRhYlNlbGVjdHNWYWx1ZTogdHJ1ZSxcblx0dHJpbUZpbHRlcjogdHJ1ZSxcblx0dmFsdWVDb21wb25lbnQ6IFZhbHVlLFxuXHR2YWx1ZUtleTogJ3ZhbHVlJ1xufTtcblxudmFyIHByb3BUeXBlcyA9IHtcblx0YXV0b2xvYWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIC8vIGF1dG9tYXRpY2FsbHkgY2FsbCB0aGUgYGxvYWRPcHRpb25zYCBwcm9wIG9uLW1vdW50OyBkZWZhdWx0cyB0byB0cnVlXG5cdGNhY2hlOiBQcm9wVHlwZXMuYW55LCAvLyBvYmplY3QgdG8gdXNlIHRvIGNhY2hlIHJlc3VsdHM7IHNldCB0byBudWxsL2ZhbHNlIHRvIGRpc2FibGUgY2FjaGluZ1xuXHRjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgLy8gQ2hpbGQgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBpbm5lciBTZWxlY3QgY29tcG9uZW50OyAocHJvcHM6IE9iamVjdCk6IFByb3BUeXBlcy5lbGVtZW50XG5cdGlnbm9yZUFjY2VudHM6IFByb3BUeXBlcy5ib29sLCAvLyBzdHJpcCBkaWFjcml0aWNzIHdoZW4gZmlsdGVyaW5nOyBkZWZhdWx0cyB0byB0cnVlXG5cdGlnbm9yZUNhc2U6IFByb3BUeXBlcy5ib29sLCAvLyBwZXJmb3JtIGNhc2UtaW5zZW5zaXRpdmUgZmlsdGVyaW5nOyBkZWZhdWx0cyB0byB0cnVlXG5cdGxvYWRPcHRpb25zOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCAvLyBjYWxsYmFjayB0byBsb2FkIG9wdGlvbnMgYXN5bmNocm9ub3VzbHk7IChpbnB1dFZhbHVlOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbik6ID9Qcm9taXNlXG5cdGxvYWRpbmdQbGFjZWhvbGRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbLy8gcmVwbGFjZXMgdGhlIHBsYWNlaG9sZGVyIHdoaWxlIG9wdGlvbnMgYXJlIGxvYWRpbmdcblx0UHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm5vZGVdKSxcblx0bXVsdGk6IFByb3BUeXBlcy5ib29sLCAvLyBtdWx0aS12YWx1ZSBpbnB1dFxuXHRub1Jlc3VsdHNUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFsvLyBmaWVsZCBub1Jlc3VsdHNUZXh0LCBkaXNwbGF5ZWQgd2hlbiBubyBvcHRpb25zIGNvbWUgYmFjayBmcm9tIHRoZSBzZXJ2ZXJcblx0UHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm5vZGVdKSxcblx0b25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLCAvLyBvbkNoYW5nZSBoYW5kbGVyOiBmdW5jdGlvbiAobmV3VmFsdWUpIHt9XG5cdG9uSW5wdXRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLCAvLyBvcHRpb25hbCBmb3Iga2VlcGluZyB0cmFjayBvZiB3aGF0IGlzIGJlaW5nIHR5cGVkXG5cdG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLCAvLyBhcnJheSBvZiBvcHRpb25zXG5cdHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFsvLyBmaWVsZCBwbGFjZWhvbGRlciwgZGlzcGxheWVkIHdoZW4gdGhlcmUncyBubyB2YWx1ZSAoc2hhcmVkIHdpdGggU2VsZWN0KVxuXHRQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubm9kZV0pLFxuXHRzZWFyY2hQcm9tcHRUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFsvLyBsYWJlbCB0byBwcm9tcHQgZm9yIHNlYXJjaCBpbnB1dFxuXHRQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubm9kZV0pLFxuXHR2YWx1ZTogUHJvcFR5cGVzLmFueSAvLyBpbml0aWFsIGZpZWxkIHZhbHVlXG59O1xuXG52YXIgZGVmYXVsdENhY2hlID0ge307XG5cbnZhciBkZWZhdWx0Q2hpbGRyZW4gPSBmdW5jdGlvbiBkZWZhdWx0Q2hpbGRyZW4ocHJvcHMpIHtcblx0cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0JDEsIHByb3BzKTtcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG5cdGF1dG9sb2FkOiB0cnVlLFxuXHRjYWNoZTogZGVmYXVsdENhY2hlLFxuXHRjaGlsZHJlbjogZGVmYXVsdENoaWxkcmVuLFxuXHRpZ25vcmVBY2NlbnRzOiB0cnVlLFxuXHRpZ25vcmVDYXNlOiB0cnVlLFxuXHRsb2FkaW5nUGxhY2Vob2xkZXI6ICdMb2FkaW5nLi4uJyxcblx0b3B0aW9uczogW10sXG5cdHNlYXJjaFByb21wdFRleHQ6ICdUeXBlIHRvIHNlYXJjaCdcbn07XG5cbnZhciBBc3luYyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG5cdGluaGVyaXRzKEFzeW5jLCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBBc3luYyhwcm9wcywgY29udGV4dCkge1xuXHRcdGNsYXNzQ2FsbENoZWNrKHRoaXMsIEFzeW5jKTtcblxuXHRcdHZhciBfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEFzeW5jLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQXN5bmMpKS5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XG5cblx0XHRfdGhpcy5fY2FjaGUgPSBwcm9wcy5jYWNoZSA9PT0gZGVmYXVsdENhY2hlID8ge30gOiBwcm9wcy5jYWNoZTtcblxuXHRcdF90aGlzLnN0YXRlID0ge1xuXHRcdFx0aW5wdXRWYWx1ZTogJycsXG5cdFx0XHRpc0xvYWRpbmc6IGZhbHNlLFxuXHRcdFx0b3B0aW9uczogcHJvcHMub3B0aW9uc1xuXHRcdH07XG5cblx0XHRfdGhpcy5vbklucHV0Q2hhbmdlID0gX3RoaXMub25JbnB1dENoYW5nZS5iaW5kKF90aGlzKTtcblx0XHRyZXR1cm4gX3RoaXM7XG5cdH1cblxuXHRjcmVhdGVDbGFzcyhBc3luYywgW3tcblx0XHRrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuXHRcdFx0dmFyIGF1dG9sb2FkID0gdGhpcy5wcm9wcy5hdXRvbG9hZDtcblxuXG5cdFx0XHRpZiAoYXV0b2xvYWQpIHtcblx0XHRcdFx0dGhpcy5sb2FkT3B0aW9ucygnJyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG5cdFx0XHRpZiAobmV4dFByb3BzLm9wdGlvbnMgIT09IHRoaXMucHJvcHMub3B0aW9ucykge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRvcHRpb25zOiBuZXh0UHJvcHMub3B0aW9uc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuXHRcdFx0dGhpcy5fY2FsbGJhY2sgPSBudWxsO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2xvYWRPcHRpb25zJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gbG9hZE9wdGlvbnMoaW5wdXRWYWx1ZSkge1xuXHRcdFx0dmFyIF90aGlzMiA9IHRoaXM7XG5cblx0XHRcdHZhciBsb2FkT3B0aW9ucyA9IHRoaXMucHJvcHMubG9hZE9wdGlvbnM7XG5cblx0XHRcdHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuXG5cdFx0XHRpZiAoY2FjaGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNhY2hlLCBpbnB1dFZhbHVlKSkge1xuXHRcdFx0XHR0aGlzLl9jYWxsYmFjayA9IG51bGw7XG5cblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0aXNMb2FkaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRvcHRpb25zOiBjYWNoZVtpbnB1dFZhbHVlXVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yLCBkYXRhKSB7XG5cdFx0XHRcdHZhciBvcHRpb25zID0gZGF0YSAmJiBkYXRhLm9wdGlvbnMgfHwgW107XG5cblx0XHRcdFx0aWYgKGNhY2hlKSB7XG5cdFx0XHRcdFx0Y2FjaGVbaW5wdXRWYWx1ZV0gPSBvcHRpb25zO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNhbGxiYWNrID09PSBfdGhpczIuX2NhbGxiYWNrKSB7XG5cdFx0XHRcdFx0X3RoaXMyLl9jYWxsYmFjayA9IG51bGw7XG5cblx0XHRcdFx0XHRfdGhpczIuc2V0U3RhdGUoe1xuXHRcdFx0XHRcdFx0aXNMb2FkaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRcdG9wdGlvbnM6IG9wdGlvbnNcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gSWdub3JlIGFsbCBidXQgdGhlIG1vc3QgcmVjZW50IHJlcXVlc3Rcblx0XHRcdHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XG5cblx0XHRcdHZhciBwcm9taXNlID0gbG9hZE9wdGlvbnMoaW5wdXRWYWx1ZSwgY2FsbGJhY2spO1xuXHRcdFx0aWYgKHByb21pc2UpIHtcblx0XHRcdFx0cHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrKG51bGwsIGRhdGEpO1xuXHRcdFx0XHR9LCBmdW5jdGlvbiAoZXJyb3IpIHtcblx0XHRcdFx0XHRyZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX2NhbGxiYWNrICYmICF0aGlzLnN0YXRlLmlzTG9hZGluZykge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRpc0xvYWRpbmc6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnb25JbnB1dENoYW5nZScsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIG9uSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSkge1xuXHRcdFx0dmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG5cdFx0XHQgICAgaWdub3JlQWNjZW50cyA9IF9wcm9wcy5pZ25vcmVBY2NlbnRzLFxuXHRcdFx0ICAgIGlnbm9yZUNhc2UgPSBfcHJvcHMuaWdub3JlQ2FzZSxcblx0XHRcdCAgICBvbklucHV0Q2hhbmdlID0gX3Byb3BzLm9uSW5wdXRDaGFuZ2U7XG5cblx0XHRcdHZhciBuZXdJbnB1dFZhbHVlID0gaW5wdXRWYWx1ZTtcblxuXHRcdFx0aWYgKG9uSW5wdXRDaGFuZ2UpIHtcblx0XHRcdFx0dmFyIHZhbHVlID0gb25JbnB1dENoYW5nZShuZXdJbnB1dFZhbHVlKTtcblx0XHRcdFx0Ly8gTm90ZTogIT0gdXNlZCBkZWxpYmVyYXRlbHkgaGVyZSB0byBjYXRjaCB1bmRlZmluZWQgYW5kIG51bGxcblx0XHRcdFx0aWYgKHZhbHVlICE9IG51bGwgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YodmFsdWUpKSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRuZXdJbnB1dFZhbHVlID0gJycgKyB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgdHJhbnNmb3JtZWRJbnB1dFZhbHVlID0gbmV3SW5wdXRWYWx1ZTtcblxuXHRcdFx0aWYgKGlnbm9yZUFjY2VudHMpIHtcblx0XHRcdFx0dHJhbnNmb3JtZWRJbnB1dFZhbHVlID0gc3RyaXBEaWFjcml0aWNzKHRyYW5zZm9ybWVkSW5wdXRWYWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpZ25vcmVDYXNlKSB7XG5cdFx0XHRcdHRyYW5zZm9ybWVkSW5wdXRWYWx1ZSA9IHRyYW5zZm9ybWVkSW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldFN0YXRlKHsgaW5wdXRWYWx1ZTogbmV3SW5wdXRWYWx1ZSB9KTtcblx0XHRcdHRoaXMubG9hZE9wdGlvbnModHJhbnNmb3JtZWRJbnB1dFZhbHVlKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5ldyBpbnB1dCB2YWx1ZSwgYnV0IHdpdGhvdXQgYXBwbHlpbmcgdG9Mb3dlckNhc2UoKSB0byBhdm9pZCBtb2RpZnlpbmcgdGhlIHVzZXIncyB2aWV3IGNhc2Ugb2YgdGhlIGlucHV0IHdoaWxlIHR5cGluZy5cblx0XHRcdHJldHVybiBuZXdJbnB1dFZhbHVlO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ25vUmVzdWx0c1RleHQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBub1Jlc3VsdHNUZXh0KCkge1xuXHRcdFx0dmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxuXHRcdFx0ICAgIGxvYWRpbmdQbGFjZWhvbGRlciA9IF9wcm9wczIubG9hZGluZ1BsYWNlaG9sZGVyLFxuXHRcdFx0ICAgIG5vUmVzdWx0c1RleHQgPSBfcHJvcHMyLm5vUmVzdWx0c1RleHQsXG5cdFx0XHQgICAgc2VhcmNoUHJvbXB0VGV4dCA9IF9wcm9wczIuc2VhcmNoUHJvbXB0VGV4dDtcblx0XHRcdHZhciBfc3RhdGUgPSB0aGlzLnN0YXRlLFxuXHRcdFx0ICAgIGlucHV0VmFsdWUgPSBfc3RhdGUuaW5wdXRWYWx1ZSxcblx0XHRcdCAgICBpc0xvYWRpbmcgPSBfc3RhdGUuaXNMb2FkaW5nO1xuXG5cblx0XHRcdGlmIChpc0xvYWRpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGxvYWRpbmdQbGFjZWhvbGRlcjtcblx0XHRcdH1cblx0XHRcdGlmIChpbnB1dFZhbHVlICYmIG5vUmVzdWx0c1RleHQpIHtcblx0XHRcdFx0cmV0dXJuIG5vUmVzdWx0c1RleHQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc2VhcmNoUHJvbXB0VGV4dDtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdmb2N1cycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvY3VzKCkge1xuXHRcdFx0dGhpcy5zZWxlY3QuZm9jdXMoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFx0XHR2YXIgX3RoaXMzID0gdGhpcztcblxuXHRcdFx0dmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxuXHRcdFx0ICAgIGNoaWxkcmVuID0gX3Byb3BzMy5jaGlsZHJlbixcblx0XHRcdCAgICBsb2FkaW5nUGxhY2Vob2xkZXIgPSBfcHJvcHMzLmxvYWRpbmdQbGFjZWhvbGRlcixcblx0XHRcdCAgICBwbGFjZWhvbGRlciA9IF9wcm9wczMucGxhY2Vob2xkZXI7XG5cdFx0XHR2YXIgX3N0YXRlMiA9IHRoaXMuc3RhdGUsXG5cdFx0XHQgICAgaXNMb2FkaW5nID0gX3N0YXRlMi5pc0xvYWRpbmcsXG5cdFx0XHQgICAgb3B0aW9ucyA9IF9zdGF0ZTIub3B0aW9ucztcblxuXG5cdFx0XHR2YXIgcHJvcHMgPSB7XG5cdFx0XHRcdG5vUmVzdWx0c1RleHQ6IHRoaXMubm9SZXN1bHRzVGV4dCgpLFxuXHRcdFx0XHRwbGFjZWhvbGRlcjogaXNMb2FkaW5nID8gbG9hZGluZ1BsYWNlaG9sZGVyIDogcGxhY2Vob2xkZXIsXG5cdFx0XHRcdG9wdGlvbnM6IGlzTG9hZGluZyAmJiBsb2FkaW5nUGxhY2Vob2xkZXIgPyBbXSA6IG9wdGlvbnMsXG5cdFx0XHRcdHJlZjogZnVuY3Rpb24gcmVmKF9yZWYpIHtcblx0XHRcdFx0XHRyZXR1cm4gX3RoaXMzLnNlbGVjdCA9IF9yZWY7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdHJldHVybiBjaGlsZHJlbihfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywgcHJvcHMsIHtcblx0XHRcdFx0aXNMb2FkaW5nOiBpc0xvYWRpbmcsXG5cdFx0XHRcdG9uSW5wdXRDaGFuZ2U6IHRoaXMub25JbnB1dENoYW5nZVxuXHRcdFx0fSkpO1xuXHRcdH1cblx0fV0pO1xuXHRyZXR1cm4gQXN5bmM7XG59KENvbXBvbmVudCk7XG5cbkFzeW5jLnByb3BUeXBlcyA9IHByb3BUeXBlcztcbkFzeW5jLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcblxudmFyIENyZWF0YWJsZVNlbGVjdCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG5cdGluaGVyaXRzKENyZWF0YWJsZVNlbGVjdCwgX1JlYWN0JENvbXBvbmVudCk7XG5cblx0ZnVuY3Rpb24gQ3JlYXRhYmxlU2VsZWN0KHByb3BzLCBjb250ZXh0KSB7XG5cdFx0Y2xhc3NDYWxsQ2hlY2sodGhpcywgQ3JlYXRhYmxlU2VsZWN0KTtcblxuXHRcdHZhciBfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKENyZWF0YWJsZVNlbGVjdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENyZWF0YWJsZVNlbGVjdCkpLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcblxuXHRcdF90aGlzLmZpbHRlck9wdGlvbnMgPSBfdGhpcy5maWx0ZXJPcHRpb25zLmJpbmQoX3RoaXMpO1xuXHRcdF90aGlzLm1lbnVSZW5kZXJlciA9IF90aGlzLm1lbnVSZW5kZXJlci5iaW5kKF90aGlzKTtcblx0XHRfdGhpcy5vbklucHV0S2V5RG93biA9IF90aGlzLm9uSW5wdXRLZXlEb3duLmJpbmQoX3RoaXMpO1xuXHRcdF90aGlzLm9uSW5wdXRDaGFuZ2UgPSBfdGhpcy5vbklucHV0Q2hhbmdlLmJpbmQoX3RoaXMpO1xuXHRcdF90aGlzLm9uT3B0aW9uU2VsZWN0ID0gX3RoaXMub25PcHRpb25TZWxlY3QuYmluZChfdGhpcyk7XG5cdFx0cmV0dXJuIF90aGlzO1xuXHR9XG5cblx0Y3JlYXRlQ2xhc3MoQ3JlYXRhYmxlU2VsZWN0LCBbe1xuXHRcdGtleTogJ2NyZWF0ZU5ld09wdGlvbicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZU5ld09wdGlvbigpIHtcblx0XHRcdHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuXHRcdFx0ICAgIGlzVmFsaWROZXdPcHRpb24gPSBfcHJvcHMuaXNWYWxpZE5ld09wdGlvbixcblx0XHRcdCAgICBuZXdPcHRpb25DcmVhdG9yID0gX3Byb3BzLm5ld09wdGlvbkNyZWF0b3IsXG5cdFx0XHQgICAgb25OZXdPcHRpb25DbGljayA9IF9wcm9wcy5vbk5ld09wdGlvbkNsaWNrLFxuXHRcdFx0ICAgIF9wcm9wcyRvcHRpb25zID0gX3Byb3BzLm9wdGlvbnMsXG5cdFx0XHQgICAgb3B0aW9ucyA9IF9wcm9wcyRvcHRpb25zID09PSB1bmRlZmluZWQgPyBbXSA6IF9wcm9wcyRvcHRpb25zO1xuXG5cblx0XHRcdGlmIChpc1ZhbGlkTmV3T3B0aW9uKHsgbGFiZWw6IHRoaXMuaW5wdXRWYWx1ZSB9KSkge1xuXHRcdFx0XHR2YXIgb3B0aW9uID0gbmV3T3B0aW9uQ3JlYXRvcih7IGxhYmVsOiB0aGlzLmlucHV0VmFsdWUsIGxhYmVsS2V5OiB0aGlzLmxhYmVsS2V5LCB2YWx1ZUtleTogdGhpcy52YWx1ZUtleSB9KTtcblx0XHRcdFx0dmFyIF9pc09wdGlvblVuaXF1ZSA9IHRoaXMuaXNPcHRpb25VbmlxdWUoeyBvcHRpb246IG9wdGlvbiwgb3B0aW9uczogb3B0aW9ucyB9KTtcblxuXHRcdFx0XHQvLyBEb24ndCBhZGQgdGhlIHNhbWUgb3B0aW9uIHR3aWNlLlxuXHRcdFx0XHRpZiAoX2lzT3B0aW9uVW5pcXVlKSB7XG5cdFx0XHRcdFx0aWYgKG9uTmV3T3B0aW9uQ2xpY2spIHtcblx0XHRcdFx0XHRcdG9uTmV3T3B0aW9uQ2xpY2sob3B0aW9uKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b3B0aW9ucy51bnNoaWZ0KG9wdGlvbik7XG5cblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0LnNlbGVjdFZhbHVlKG9wdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZmlsdGVyT3B0aW9ucycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZpbHRlck9wdGlvbnMkJDEoKSB7XG5cdFx0XHR2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXG5cdFx0XHQgICAgZmlsdGVyT3B0aW9ucyQkMSA9IF9wcm9wczIuZmlsdGVyT3B0aW9ucyxcblx0XHRcdCAgICBpc1ZhbGlkTmV3T3B0aW9uID0gX3Byb3BzMi5pc1ZhbGlkTmV3T3B0aW9uLFxuXHRcdFx0ICAgIHByb21wdFRleHRDcmVhdG9yID0gX3Byb3BzMi5wcm9tcHRUZXh0Q3JlYXRvcjtcblxuXHRcdFx0Ly8gVFJJQ0tZIENoZWNrIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb25zIGFzIHdlbGwuXG5cdFx0XHQvLyBEb24ndCBkaXNwbGF5IGEgY3JlYXRlLXByb21wdCBmb3IgYSB2YWx1ZSB0aGF0J3Mgc2VsZWN0ZWQuXG5cdFx0XHQvLyBUaGlzIGNvdmVycyBhc3luYyBlZGdlLWNhc2VzIHdoZXJlIGEgbmV3bHktY3JlYXRlZCBPcHRpb24gaXNuJ3QgeWV0IGluIHRoZSBhc3luYy1sb2FkZWQgYXJyYXkuXG5cblx0XHRcdHZhciBleGNsdWRlT3B0aW9ucyA9IChhcmd1bWVudHMubGVuZ3RoIDw9IDIgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMl0pIHx8IFtdO1xuXG5cdFx0XHR2YXIgZmlsdGVyZWRPcHRpb25zID0gZmlsdGVyT3B0aW9ucyQkMS5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykgfHwgW107XG5cblx0XHRcdGlmIChpc1ZhbGlkTmV3T3B0aW9uKHsgbGFiZWw6IHRoaXMuaW5wdXRWYWx1ZSB9KSkge1xuXHRcdFx0XHR2YXIgX25ld09wdGlvbkNyZWF0b3IgPSB0aGlzLnByb3BzLm5ld09wdGlvbkNyZWF0b3I7XG5cblxuXHRcdFx0XHR2YXIgb3B0aW9uID0gX25ld09wdGlvbkNyZWF0b3Ioe1xuXHRcdFx0XHRcdGxhYmVsOiB0aGlzLmlucHV0VmFsdWUsXG5cdFx0XHRcdFx0bGFiZWxLZXk6IHRoaXMubGFiZWxLZXksXG5cdFx0XHRcdFx0dmFsdWVLZXk6IHRoaXMudmFsdWVLZXlcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gVFJJQ0tZIENvbXBhcmUgdG8gYWxsIG9wdGlvbnMgKG5vdCBqdXN0IGZpbHRlcmVkIG9wdGlvbnMpIGluIGNhc2Ugb3B0aW9uIGhhcyBhbHJlYWR5IGJlZW4gc2VsZWN0ZWQpLlxuXHRcdFx0XHQvLyBGb3IgbXVsdGktc2VsZWN0cywgdGhpcyB3b3VsZCByZW1vdmUgaXQgZnJvbSB0aGUgZmlsdGVyZWQgbGlzdC5cblx0XHRcdFx0dmFyIF9pc09wdGlvblVuaXF1ZTIgPSB0aGlzLmlzT3B0aW9uVW5pcXVlKHtcblx0XHRcdFx0XHRvcHRpb246IG9wdGlvbixcblx0XHRcdFx0XHRvcHRpb25zOiBleGNsdWRlT3B0aW9ucy5jb25jYXQoZmlsdGVyZWRPcHRpb25zKVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoX2lzT3B0aW9uVW5pcXVlMikge1xuXHRcdFx0XHRcdHZhciBwcm9tcHQgPSBwcm9tcHRUZXh0Q3JlYXRvcih0aGlzLmlucHV0VmFsdWUpO1xuXG5cdFx0XHRcdFx0dGhpcy5fY3JlYXRlUGxhY2Vob2xkZXJPcHRpb24gPSBfbmV3T3B0aW9uQ3JlYXRvcih7XG5cdFx0XHRcdFx0XHRsYWJlbDogcHJvbXB0LFxuXHRcdFx0XHRcdFx0bGFiZWxLZXk6IHRoaXMubGFiZWxLZXksXG5cdFx0XHRcdFx0XHR2YWx1ZUtleTogdGhpcy52YWx1ZUtleVxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0ZmlsdGVyZWRPcHRpb25zLnVuc2hpZnQodGhpcy5fY3JlYXRlUGxhY2Vob2xkZXJPcHRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmaWx0ZXJlZE9wdGlvbnM7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnaXNPcHRpb25VbmlxdWUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc09wdGlvblVuaXF1ZShfcmVmKSB7XG5cdFx0XHR2YXIgb3B0aW9uID0gX3JlZi5vcHRpb24sXG5cdFx0XHQgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcblx0XHRcdHZhciBpc09wdGlvblVuaXF1ZSA9IHRoaXMucHJvcHMuaXNPcHRpb25VbmlxdWU7XG5cblxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwgdGhpcy5wcm9wcy5vcHRpb25zO1xuXG5cdFx0XHRyZXR1cm4gaXNPcHRpb25VbmlxdWUoe1xuXHRcdFx0XHRsYWJlbEtleTogdGhpcy5sYWJlbEtleSxcblx0XHRcdFx0b3B0aW9uOiBvcHRpb24sXG5cdFx0XHRcdG9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRcdHZhbHVlS2V5OiB0aGlzLnZhbHVlS2V5XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdtZW51UmVuZGVyZXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBtZW51UmVuZGVyZXIkJDEocGFyYW1zKSB7XG5cdFx0XHR2YXIgbWVudVJlbmRlcmVyJCQxID0gdGhpcy5wcm9wcy5tZW51UmVuZGVyZXI7XG5cblxuXHRcdFx0cmV0dXJuIG1lbnVSZW5kZXJlciQkMShfZXh0ZW5kcyh7fSwgcGFyYW1zLCB7XG5cdFx0XHRcdG9uU2VsZWN0OiB0aGlzLm9uT3B0aW9uU2VsZWN0LFxuXHRcdFx0XHRzZWxlY3RWYWx1ZTogdGhpcy5vbk9wdGlvblNlbGVjdFxuXHRcdFx0fSkpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ29uSW5wdXRDaGFuZ2UnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBvbklucHV0Q2hhbmdlKGlucHV0KSB7XG5cdFx0XHR2YXIgb25JbnB1dENoYW5nZSA9IHRoaXMucHJvcHMub25JbnB1dENoYW5nZTtcblxuXHRcdFx0Ly8gVGhpcyB2YWx1ZSBtYXkgYmUgbmVlZGVkIGluIGJldHdlZW4gU2VsZWN0IG1vdW50cyAod2hlbiB0aGlzLnNlbGVjdCBpcyBudWxsKVxuXG5cdFx0XHR0aGlzLmlucHV0VmFsdWUgPSBpbnB1dDtcblxuXHRcdFx0aWYgKG9uSW5wdXRDaGFuZ2UpIHtcblx0XHRcdFx0dGhpcy5pbnB1dFZhbHVlID0gb25JbnB1dENoYW5nZShpbnB1dCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLmlucHV0VmFsdWU7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnb25JbnB1dEtleURvd24nLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBvbklucHV0S2V5RG93bihldmVudCkge1xuXHRcdFx0dmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxuXHRcdFx0ICAgIHNob3VsZEtleURvd25FdmVudENyZWF0ZU5ld09wdGlvbiA9IF9wcm9wczMuc2hvdWxkS2V5RG93bkV2ZW50Q3JlYXRlTmV3T3B0aW9uLFxuXHRcdFx0ICAgIG9uSW5wdXRLZXlEb3duID0gX3Byb3BzMy5vbklucHV0S2V5RG93bjtcblxuXHRcdFx0dmFyIGZvY3VzZWRPcHRpb24gPSB0aGlzLnNlbGVjdC5nZXRGb2N1c2VkT3B0aW9uKCk7XG5cblx0XHRcdGlmIChmb2N1c2VkT3B0aW9uICYmIGZvY3VzZWRPcHRpb24gPT09IHRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyT3B0aW9uICYmIHNob3VsZEtleURvd25FdmVudENyZWF0ZU5ld09wdGlvbih7IGtleUNvZGU6IGV2ZW50LmtleUNvZGUgfSkpIHtcblx0XHRcdFx0dGhpcy5jcmVhdGVOZXdPcHRpb24oKTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IGRlY29yYXRlZCBTZWxlY3QgZnJvbSBkb2luZyBhbnl0aGluZyBhZGRpdGlvbmFsIHdpdGggdGhpcyBrZXlEb3duIGV2ZW50XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9uSW5wdXRLZXlEb3duKSB7XG5cdFx0XHRcdG9uSW5wdXRLZXlEb3duKGV2ZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdvbk9wdGlvblNlbGVjdCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIG9uT3B0aW9uU2VsZWN0KG9wdGlvbikge1xuXHRcdFx0aWYgKG9wdGlvbiA9PT0gdGhpcy5fY3JlYXRlUGxhY2Vob2xkZXJPcHRpb24pIHtcblx0XHRcdFx0dGhpcy5jcmVhdGVOZXdPcHRpb24oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0LnNlbGVjdFZhbHVlKG9wdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZm9jdXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBmb2N1cygpIHtcblx0XHRcdHRoaXMuc2VsZWN0LmZvY3VzKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIF90aGlzMiA9IHRoaXM7XG5cblx0XHRcdHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcblx0XHRcdCAgICByZWZQcm9wID0gX3Byb3BzNC5yZWYsXG5cdFx0XHQgICAgcmVzdFByb3BzID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzNCwgWydyZWYnXSk7XG5cdFx0XHR2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCB1c2UgZGVzdHJ1Y3R1cmluZyBkZWZhdWx0IHZhbHVlcyB0byBzZXQgdGhlIGNoaWxkcmVuLFxuXHRcdFx0Ly8gYmVjYXVzZSBpdCB3b24ndCBhcHBseSB3b3JrIGlmIGBjaGlsZHJlbmAgaXMgbnVsbC4gQSBmYWxzeSBjaGVjayBpc1xuXHRcdFx0Ly8gbW9yZSByZWxpYWJsZSBpbiByZWFsIHdvcmxkIHVzZS1jYXNlcy5cblxuXHRcdFx0aWYgKCFjaGlsZHJlbikge1xuXHRcdFx0XHRjaGlsZHJlbiA9IGRlZmF1bHRDaGlsZHJlbiQyO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcHJvcHMgPSBfZXh0ZW5kcyh7fSwgcmVzdFByb3BzLCB7XG5cdFx0XHRcdGFsbG93Q3JlYXRlOiB0cnVlLFxuXHRcdFx0XHRmaWx0ZXJPcHRpb25zOiB0aGlzLmZpbHRlck9wdGlvbnMsXG5cdFx0XHRcdG1lbnVSZW5kZXJlcjogdGhpcy5tZW51UmVuZGVyZXIsXG5cdFx0XHRcdG9uSW5wdXRDaGFuZ2U6IHRoaXMub25JbnB1dENoYW5nZSxcblx0XHRcdFx0b25JbnB1dEtleURvd246IHRoaXMub25JbnB1dEtleURvd24sXG5cdFx0XHRcdHJlZjogZnVuY3Rpb24gcmVmKF9yZWYyKSB7XG5cdFx0XHRcdFx0X3RoaXMyLnNlbGVjdCA9IF9yZWYyO1xuXG5cdFx0XHRcdFx0Ly8gVGhlc2UgdmFsdWVzIG1heSBiZSBuZWVkZWQgaW4gYmV0d2VlbiBTZWxlY3QgbW91bnRzICh3aGVuIHRoaXMuc2VsZWN0IGlzIG51bGwpXG5cdFx0XHRcdFx0aWYgKF9yZWYyKSB7XG5cdFx0XHRcdFx0XHRfdGhpczIubGFiZWxLZXkgPSBfcmVmMi5wcm9wcy5sYWJlbEtleTtcblx0XHRcdFx0XHRcdF90aGlzMi52YWx1ZUtleSA9IF9yZWYyLnByb3BzLnZhbHVlS2V5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocmVmUHJvcCkge1xuXHRcdFx0XHRcdFx0cmVmUHJvcChfcmVmMik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGNoaWxkcmVuKHByb3BzKTtcblx0XHR9XG5cdH1dKTtcblx0cmV0dXJuIENyZWF0YWJsZVNlbGVjdDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxudmFyIGRlZmF1bHRDaGlsZHJlbiQyID0gZnVuY3Rpb24gZGVmYXVsdENoaWxkcmVuKHByb3BzKSB7XG5cdHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNlbGVjdCQxLCBwcm9wcyk7XG59O1xuXG52YXIgaXNPcHRpb25VbmlxdWUgPSBmdW5jdGlvbiBpc09wdGlvblVuaXF1ZShfcmVmMykge1xuXHR2YXIgb3B0aW9uID0gX3JlZjMub3B0aW9uLFxuXHQgICAgb3B0aW9ucyA9IF9yZWYzLm9wdGlvbnMsXG5cdCAgICBsYWJlbEtleSA9IF9yZWYzLmxhYmVsS2V5LFxuXHQgICAgdmFsdWVLZXkgPSBfcmVmMy52YWx1ZUtleTtcblxuXHRpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKGV4aXN0aW5nT3B0aW9uKSB7XG5cdFx0cmV0dXJuIGV4aXN0aW5nT3B0aW9uW2xhYmVsS2V5XSA9PT0gb3B0aW9uW2xhYmVsS2V5XSB8fCBleGlzdGluZ09wdGlvblt2YWx1ZUtleV0gPT09IG9wdGlvblt2YWx1ZUtleV07XG5cdH0pLmxlbmd0aCA9PT0gMDtcbn07XG5cbnZhciBpc1ZhbGlkTmV3T3B0aW9uID0gZnVuY3Rpb24gaXNWYWxpZE5ld09wdGlvbihfcmVmNCkge1xuXHR2YXIgbGFiZWwgPSBfcmVmNC5sYWJlbDtcblx0cmV0dXJuICEhbGFiZWw7XG59O1xuXG52YXIgbmV3T3B0aW9uQ3JlYXRvciA9IGZ1bmN0aW9uIG5ld09wdGlvbkNyZWF0b3IoX3JlZjUpIHtcblx0dmFyIGxhYmVsID0gX3JlZjUubGFiZWwsXG5cdCAgICBsYWJlbEtleSA9IF9yZWY1LmxhYmVsS2V5LFxuXHQgICAgdmFsdWVLZXkgPSBfcmVmNS52YWx1ZUtleTtcblxuXHR2YXIgb3B0aW9uID0ge307XG5cdG9wdGlvblt2YWx1ZUtleV0gPSBsYWJlbDtcblx0b3B0aW9uW2xhYmVsS2V5XSA9IGxhYmVsO1xuXHRvcHRpb24uY2xhc3NOYW1lID0gJ1NlbGVjdC1jcmVhdGUtb3B0aW9uLXBsYWNlaG9sZGVyJztcblxuXHRyZXR1cm4gb3B0aW9uO1xufTtcblxudmFyIHByb21wdFRleHRDcmVhdG9yID0gZnVuY3Rpb24gcHJvbXB0VGV4dENyZWF0b3IobGFiZWwpIHtcblx0cmV0dXJuICdDcmVhdGUgb3B0aW9uIFwiJyArIGxhYmVsICsgJ1wiJztcbn07XG5cbnZhciBzaG91bGRLZXlEb3duRXZlbnRDcmVhdGVOZXdPcHRpb24gPSBmdW5jdGlvbiBzaG91bGRLZXlEb3duRXZlbnRDcmVhdGVOZXdPcHRpb24oX3JlZjYpIHtcblx0dmFyIGtleUNvZGUgPSBfcmVmNi5rZXlDb2RlO1xuXG5cdHN3aXRjaCAoa2V5Q29kZSkge1xuXHRcdGNhc2UgOTogLy8gVEFCXG5cdFx0Y2FzZSAxMzogLy8gRU5URVJcblx0XHRjYXNlIDE4ODpcblx0XHRcdC8vIENPTU1BXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vLyBEZWZhdWx0IHByb3AgbWV0aG9kc1xuQ3JlYXRhYmxlU2VsZWN0LmlzT3B0aW9uVW5pcXVlID0gaXNPcHRpb25VbmlxdWU7XG5DcmVhdGFibGVTZWxlY3QuaXNWYWxpZE5ld09wdGlvbiA9IGlzVmFsaWROZXdPcHRpb247XG5DcmVhdGFibGVTZWxlY3QubmV3T3B0aW9uQ3JlYXRvciA9IG5ld09wdGlvbkNyZWF0b3I7XG5DcmVhdGFibGVTZWxlY3QucHJvbXB0VGV4dENyZWF0b3IgPSBwcm9tcHRUZXh0Q3JlYXRvcjtcbkNyZWF0YWJsZVNlbGVjdC5zaG91bGRLZXlEb3duRXZlbnRDcmVhdGVOZXdPcHRpb24gPSBzaG91bGRLZXlEb3duRXZlbnRDcmVhdGVOZXdPcHRpb247XG5cbkNyZWF0YWJsZVNlbGVjdC5kZWZhdWx0UHJvcHMgPSB7XG5cdGZpbHRlck9wdGlvbnM6IGZpbHRlck9wdGlvbnMsXG5cdGlzT3B0aW9uVW5pcXVlOiBpc09wdGlvblVuaXF1ZSxcblx0aXNWYWxpZE5ld09wdGlvbjogaXNWYWxpZE5ld09wdGlvbixcblx0bWVudVJlbmRlcmVyOiBtZW51UmVuZGVyZXIsXG5cdG5ld09wdGlvbkNyZWF0b3I6IG5ld09wdGlvbkNyZWF0b3IsXG5cdHByb21wdFRleHRDcmVhdG9yOiBwcm9tcHRUZXh0Q3JlYXRvcixcblx0c2hvdWxkS2V5RG93bkV2ZW50Q3JlYXRlTmV3T3B0aW9uOiBzaG91bGRLZXlEb3duRXZlbnRDcmVhdGVOZXdPcHRpb25cbn07XG5cbkNyZWF0YWJsZVNlbGVjdC5wcm9wVHlwZXMgPSB7XG5cdC8vIENoaWxkIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgaW5uZXIgU2VsZWN0IGNvbXBvbmVudFxuXHQvLyBUaGlzIGNvbXBvbmVudCBjYW4gYmUgdXNlZCB0byBjb21wb3NlIEhPQ3MgKGVnIENyZWF0YWJsZSBhbmQgQXN5bmMpXG5cdC8vIChwcm9wczogT2JqZWN0KTogUHJvcFR5cGVzLmVsZW1lbnRcblx0Y2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuXG5cdC8vIFNlZSBTZWxlY3QucHJvcFR5cGVzLmZpbHRlck9wdGlvbnNcblx0ZmlsdGVyT3B0aW9uczogUHJvcFR5cGVzLmFueSxcblxuXHQvLyBTZWFyY2hlcyBmb3IgYW55IG1hdGNoaW5nIG9wdGlvbiB3aXRoaW4gdGhlIHNldCBvZiBvcHRpb25zLlxuXHQvLyBUaGlzIGZ1bmN0aW9uIHByZXZlbnRzIGR1cGxpY2F0ZSBvcHRpb25zIGZyb20gYmVpbmcgY3JlYXRlZC5cblx0Ly8gKHsgb3B0aW9uOiBPYmplY3QsIG9wdGlvbnM6IEFycmF5LCBsYWJlbEtleTogc3RyaW5nLCB2YWx1ZUtleTogc3RyaW5nIH0pOiBib29sZWFuXG5cdGlzT3B0aW9uVW5pcXVlOiBQcm9wVHlwZXMuZnVuYyxcblxuXHQvLyBEZXRlcm1pbmVzIGlmIHRoZSBjdXJyZW50IGlucHV0IHRleHQgcmVwcmVzZW50cyBhIHZhbGlkIG9wdGlvbi5cblx0Ly8gKHsgbGFiZWw6IHN0cmluZyB9KTogYm9vbGVhblxuXHRpc1ZhbGlkTmV3T3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcblxuXHQvLyBTZWUgU2VsZWN0LnByb3BUeXBlcy5tZW51UmVuZGVyZXJcblx0bWVudVJlbmRlcmVyOiBQcm9wVHlwZXMuYW55LFxuXG5cdC8vIEZhY3RvcnkgdG8gY3JlYXRlIG5ldyBvcHRpb24uXG5cdC8vICh7IGxhYmVsOiBzdHJpbmcsIGxhYmVsS2V5OiBzdHJpbmcsIHZhbHVlS2V5OiBzdHJpbmcgfSk6IE9iamVjdFxuXHRuZXdPcHRpb25DcmVhdG9yOiBQcm9wVHlwZXMuZnVuYyxcblxuXHQvLyBpbnB1dCBjaGFuZ2UgaGFuZGxlcjogZnVuY3Rpb24gKGlucHV0VmFsdWUpIHt9XG5cdG9uSW5wdXRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG5cdC8vIGlucHV0IGtleURvd24gaGFuZGxlcjogZnVuY3Rpb24gKGV2ZW50KSB7fVxuXHRvbklucHV0S2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG5cblx0Ly8gbmV3IG9wdGlvbiBjbGljayBoYW5kbGVyOiBmdW5jdGlvbiAob3B0aW9uKSB7fVxuXHRvbk5ld09wdGlvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuXHQvLyBTZWUgU2VsZWN0LnByb3BUeXBlcy5vcHRpb25zXG5cdG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheSxcblxuXHQvLyBDcmVhdGVzIHByb21wdC9wbGFjZWhvbGRlciBvcHRpb24gdGV4dC5cblx0Ly8gKGZpbHRlclRleHQ6IHN0cmluZyk6IHN0cmluZ1xuXHRwcm9tcHRUZXh0Q3JlYXRvcjogUHJvcFR5cGVzLmZ1bmMsXG5cblx0cmVmOiBQcm9wVHlwZXMuZnVuYyxcblxuXHQvLyBEZWNpZGVzIGlmIGEga2V5RG93biBldmVudCAoZWcgaXRzIGBrZXlDb2RlYCkgc2hvdWxkIHJlc3VsdCBpbiB0aGUgY3JlYXRpb24gb2YgYSBuZXcgb3B0aW9uLlxuXHRzaG91bGRLZXlEb3duRXZlbnRDcmVhdGVOZXdPcHRpb246IFByb3BUeXBlcy5mdW5jXG59O1xuXG52YXIgQXN5bmNDcmVhdGFibGVTZWxlY3QgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuXHRpbmhlcml0cyhBc3luY0NyZWF0YWJsZVNlbGVjdCwgX1JlYWN0JENvbXBvbmVudCk7XG5cblx0ZnVuY3Rpb24gQXN5bmNDcmVhdGFibGVTZWxlY3QoKSB7XG5cdFx0Y2xhc3NDYWxsQ2hlY2sodGhpcywgQXN5bmNDcmVhdGFibGVTZWxlY3QpO1xuXHRcdHJldHVybiBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChBc3luY0NyZWF0YWJsZVNlbGVjdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEFzeW5jQ3JlYXRhYmxlU2VsZWN0KSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG5cdH1cblxuXHRjcmVhdGVDbGFzcyhBc3luY0NyZWF0YWJsZVNlbGVjdCwgW3tcblx0XHRrZXk6ICdmb2N1cycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvY3VzKCkge1xuXHRcdFx0dGhpcy5zZWxlY3QuZm9jdXMoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFx0XHR2YXIgX3RoaXMyID0gdGhpcztcblxuXHRcdFx0cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdEFzeW5jLFxuXHRcdFx0XHR0aGlzLnByb3BzLFxuXHRcdFx0XHRmdW5jdGlvbiAoX3JlZikge1xuXHRcdFx0XHRcdHZhciByZWYgPSBfcmVmLnJlZixcblx0XHRcdFx0XHQgICAgYXN5bmNQcm9wcyA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFsncmVmJ10pO1xuXG5cdFx0XHRcdFx0dmFyIGFzeW5jUmVmID0gcmVmO1xuXHRcdFx0XHRcdHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFx0Q3JlYXRhYmxlU2VsZWN0LFxuXHRcdFx0XHRcdFx0YXN5bmNQcm9wcyxcblx0XHRcdFx0XHRcdGZ1bmN0aW9uIChfcmVmMikge1xuXHRcdFx0XHRcdFx0XHR2YXIgcmVmID0gX3JlZjIucmVmLFxuXHRcdFx0XHRcdFx0XHQgICAgY3JlYXRhYmxlUHJvcHMgPSBvYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydyZWYnXSk7XG5cblx0XHRcdFx0XHRcdFx0dmFyIGNyZWF0YWJsZVJlZiA9IHJlZjtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIF90aGlzMi5wcm9wcy5jaGlsZHJlbihfZXh0ZW5kcyh7fSwgY3JlYXRhYmxlUHJvcHMsIHtcblx0XHRcdFx0XHRcdFx0XHRyZWY6IGZ1bmN0aW9uIHJlZihzZWxlY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNyZWF0YWJsZVJlZihzZWxlY3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YXN5bmNSZWYoc2VsZWN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdF90aGlzMi5zZWxlY3QgPSBzZWxlY3Q7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblx0cmV0dXJuIEFzeW5jQ3JlYXRhYmxlU2VsZWN0O1xufShSZWFjdC5Db21wb25lbnQpO1xuXG52YXIgZGVmYXVsdENoaWxkcmVuJDEgPSBmdW5jdGlvbiBkZWZhdWx0Q2hpbGRyZW4ocHJvcHMpIHtcblx0cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0JDEsIHByb3BzKTtcbn07XG5cbkFzeW5jQ3JlYXRhYmxlU2VsZWN0LnByb3BUeXBlcyA9IHtcblx0Y2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQgLy8gQ2hpbGQgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBpbm5lciBTZWxlY3QgY29tcG9uZW50OyAocHJvcHM6IE9iamVjdCk6IFByb3BUeXBlcy5lbGVtZW50XG59O1xuXG5Bc3luY0NyZWF0YWJsZVNlbGVjdC5kZWZhdWx0UHJvcHMgPSB7XG5cdGNoaWxkcmVuOiBkZWZhdWx0Q2hpbGRyZW4kMVxufTtcblxuU2VsZWN0JDEuQXN5bmMgPSBBc3luYztcblNlbGVjdCQxLkFzeW5jQ3JlYXRhYmxlID0gQXN5bmNDcmVhdGFibGVTZWxlY3Q7XG5TZWxlY3QkMS5DcmVhdGFibGUgPSBDcmVhdGFibGVTZWxlY3Q7XG5TZWxlY3QkMS5WYWx1ZSA9IFZhbHVlO1xuU2VsZWN0JDEuT3B0aW9uID0gT3B0aW9uO1xuXG5leHBvcnQgeyBBc3luYywgQXN5bmNDcmVhdGFibGVTZWxlY3QgYXMgQXN5bmNDcmVhdGFibGUsIENyZWF0YWJsZVNlbGVjdCBhcyBDcmVhdGFibGUsIFZhbHVlLCBPcHRpb24sIG1lbnVSZW5kZXJlciBhcyBkZWZhdWx0TWVudVJlbmRlcmVyLCBhcnJvd1JlbmRlcmVyIGFzIGRlZmF1bHRBcnJvd1JlbmRlcmVyLCBjbGVhclJlbmRlcmVyIGFzIGRlZmF1bHRDbGVhclJlbmRlcmVyLCBmaWx0ZXJPcHRpb25zIGFzIGRlZmF1bHRGaWx0ZXJPcHRpb25zIH07XG5leHBvcnQgZGVmYXVsdCBTZWxlY3QkMTtcbiIsIi8qIVxuICBDb3B5cmlnaHQgKGMpIDIwMTcgSmVkIFdhdHNvbi5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcbiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoIWFyZykgY29udGludWU7XG5cblx0XHRcdHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZztcblxuXHRcdFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChhcmcpO1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgaW5uZXIgPSBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChpbm5lcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiJdLCJuYW1lcyI6WyJfZXh0ZW5kcyIsIk9iamVjdCIsImFzc2lnbiIsInRhcmdldCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJfY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl9yZWFjdCIsIl9yZWFjdDIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3Byb3BUeXBlczIiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInNpemVyU3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsImxlZnQiLCJ2aXNpYmlsaXR5IiwiaGVpZ2h0Iiwib3ZlcmZsb3ciLCJ3aGl0ZVNwYWNlIiwiSU5QVVRfUFJPUFNfQkxBQ0tMSVNUIiwiY29weVN0eWxlcyIsInN0eWxlcyIsIm5vZGUiLCJzdHlsZSIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHQiLCJmb250U3R5bGUiLCJsZXR0ZXJTcGFjaW5nIiwidGV4dFRyYW5zZm9ybSIsImlzSUUiLCJ3aW5kb3ciLCJuYXZpZ2F0b3IiLCJ0ZXN0IiwidXNlckFnZW50IiwiZ2VuZXJhdGVJZCIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsInN1YnN0ciIsInVuZGVmaW5lZCIsIkF1dG9zaXplSW5wdXQiLCJfQ29tcG9uZW50IiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJUeXBlRXJyb3IiLCJ0aGlzIiwiX3RoaXMiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9fcHJvdG9fXyIsImdldFByb3RvdHlwZU9mIiwiaW5wdXRSZWYiLCJlbCIsImlucHV0IiwicGxhY2VIb2xkZXJTaXplclJlZiIsInBsYWNlSG9sZGVyU2l6ZXIiLCJzaXplclJlZiIsInNpemVyIiwic3RhdGUiLCJpbnB1dFdpZHRoIiwibWluV2lkdGgiLCJpbnB1dElkIiwiaWQiLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsInZhbHVlIiwic2V0UHJvdG90eXBlT2YiLCJjb21wb25lbnREaWRNb3VudCIsIm1vdW50ZWQiLCJjb3B5SW5wdXRTdHlsZXMiLCJ1cGRhdGVJbnB1dFdpZHRoIiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm5leHRQcm9wcyIsInNldFN0YXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwib25BdXRvc2l6ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImlucHV0U3R5bGVzIiwic2Nyb2xsV2lkdGgiLCJuZXdJbnB1dFdpZHRoIiwicGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlcklzTWluV2lkdGgiLCJtYXgiLCJ0eXBlIiwiZXh0cmFXaWR0aCIsInBhcnNlSW50IiwiZ2V0SW5wdXQiLCJmb2N1cyIsImJsdXIiLCJzZWxlY3QiLCJyZW5kZXJTdHlsZXMiLCJpbmplY3RTdHlsZXMiLCJjcmVhdGVFbGVtZW50IiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJyZW5kZXIiLCJzaXplclZhbHVlIiwiZGVmYXVsdFZhbHVlIiwicmVkdWNlIiwicHJldmlvdXNWYWx1ZSIsImN1cnJlbnRWYWx1ZSIsIndyYXBwZXJTdHlsZSIsImRpc3BsYXkiLCJpbnB1dFN0eWxlIiwiYm94U2l6aW5nIiwid2lkdGgiLCJpbnB1dFByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwia2V5cyIsImluZGV4T2YiLCJjbGVhbklucHV0UHJvcHMiLCJmb3JFYWNoIiwiZmllbGQiLCJjbGFzc05hbWUiLCJpbnB1dENsYXNzTmFtZSIsInJlZiIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsInN0cmluZyIsImFueSIsIm9uZU9mVHlwZSIsIm51bWJlciIsImJvb2wiLCJmdW5jIiwib2JqZWN0Iiwib25DaGFuZ2UiLCJkZWZhdWx0UHJvcHMiLCJleHBvcnRzIiwiYXJyb3dSZW5kZXJlciIsIl9yZWYiLCJvbk1vdXNlRG93biIsImNsZWFyUmVuZGVyZXIiLCJtYXAiLCJzdHJpcERpYWNyaXRpY3MiLCJzdHIiLCJyZXBsYWNlIiwibGV0dGVycyIsImJhc2UiLCJpc1ZhbGlkIiwiZmlsdGVyT3B0aW9ucyIsIm9wdGlvbnMiLCJmaWx0ZXJWYWx1ZSIsImV4Y2x1ZGVPcHRpb25zIiwiaWdub3JlQWNjZW50cyIsImlnbm9yZUNhc2UiLCJ0b0xvd2VyQ2FzZSIsInRyaW1GaWx0ZXIiLCJ0cmltIiwidmFsdWVLZXkiLCJmaWx0ZXIiLCJvcHRpb24iLCJmaWx0ZXJPcHRpb24iLCJsYWJlbCIsImxhYmVsS2V5IiwiaGFzVmFsdWUiLCJoYXNMYWJlbCIsInZhbHVlVGVzdCIsIlN0cmluZyIsImxhYmVsVGVzdCIsIm1hdGNoUHJvcCIsIm1hdGNoUG9zIiwibWVudVJlbmRlcmVyIiwiZm9jdXNlZE9wdGlvbiIsImZvY3VzT3B0aW9uIiwiaW5wdXRWYWx1ZSIsImluc3RhbmNlUHJlZml4Iiwib25Gb2N1cyIsIm9uT3B0aW9uUmVmIiwib25TZWxlY3QiLCJvcHRpb25DbGFzc05hbWUiLCJvcHRpb25Db21wb25lbnQiLCJvcHRpb25SZW5kZXJlciIsInJlbW92ZVZhbHVlIiwic2VsZWN0VmFsdWUiLCJ2YWx1ZUFycmF5IiwiT3B0aW9uIiwiaXNTZWxlY3RlZCIsInNvbWUiLCJ4IiwiaXNGb2N1c2VkIiwib3B0aW9uQ2xhc3MiLCJkaXNhYmxlZCIsImlzRGlzYWJsZWQiLCJvcHRpb25JbmRleCIsIl9yZWYyIiwiYmxvY2tFdmVudCIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJ0YWdOYW1lIiwib3BlbiIsImhyZWYiLCJsb2NhdGlvbiIsIl90eXBlb2YiLCJTeW1ib2wiLCJpdGVyYXRvciIsImNsYXNzQ2FsbENoZWNrIiwiQXdhaXRWYWx1ZSIsIkFzeW5jR2VuZXJhdG9yIiwiZ2VuIiwiZnJvbnQiLCJiYWNrIiwicmVzdW1lIiwiYXJnIiwicmVzdWx0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwic2V0dGxlIiwiZG9uZSIsImVyciIsInJlamVjdCIsIm5leHQiLCJfaW52b2tlIiwic2VuZCIsInJlcXVlc3QiLCJyZXR1cm4iLCJhc3luY0l0ZXJhdG9yIiwidGhyb3ciLCJjcmVhdGVDbGFzcyIsImluaGVyaXRzIiwib2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX1JlYWN0JENvbXBvbmVudCIsImhhbmRsZU1vdXNlRG93biIsImJpbmQiLCJoYW5kbGVNb3VzZUVudGVyIiwiaGFuZGxlTW91c2VNb3ZlIiwiaGFuZGxlVG91Y2hTdGFydCIsImhhbmRsZVRvdWNoRW5kIiwiaGFuZGxlVG91Y2hNb3ZlIiwiZHJhZ2dpbmciLCJfcHJvcHMiLCJvbkNsaWNrIiwiY2hpbGRyZW4iLCJyb2xlIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZU1vdmUiLCJvblRvdWNoU3RhcnQiLCJvblRvdWNoTW92ZSIsIm9uVG91Y2hFbmQiLCJ0aXRsZSIsImlzUmVxdWlyZWQiLCJvblVuZm9jdXMiLCJWYWx1ZSIsIm9uUmVtb3ZlIiwiaGFuZGxlVG91Y2hFbmRSZW1vdmUiLCJidXR0b24iLCJyZW5kZXJSZW1vdmVJY29uIiwicmVuZGVyTGFiZWwiLCJzdHJpbmdpZnlWYWx1ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdHJpbmdPck5vZGUiLCJzdHJpbmdPck51bWJlciIsImluc3RhbmNlSWQiLCJleHBhbmRWYWx1ZSIsInZhbHVlVHlwZSIsImhhbmRsZVJlcXVpcmVkIiwibXVsdGkiLCJTZWxlY3QkMSIsIlNlbGVjdCIsImZuIiwiaXNPcGVuIiwiaXNQc2V1ZG9Gb2N1c2VkIiwicmVxdWlyZWQiLCJjb21wb25lbnRXaWxsTW91bnQiLCJfaW5zdGFuY2VQcmVmaXgiLCJnZXRWYWx1ZUFycmF5IiwiYXV0b2ZvY3VzIiwiY29uc29sZSIsIndhcm4iLCJhdXRvRm9jdXMiLCJvblNlbGVjdFJlc2V0c0lucHV0IiwiaGFuZGxlSW5wdXRWYWx1ZUNoYW5nZSIsIm1lbnUiLCJmb2N1c2VkIiwiaGFzU2Nyb2xsZWRUb09wdGlvbiIsImZvY3VzZWRPcHRpb25Ob2RlIiwiZmluZERPTU5vZGUiLCJtZW51Tm9kZSIsInNjcm9sbFRvcCIsInNjcm9sbEJvdHRvbSIsIm9mZnNldEhlaWdodCIsIm9wdGlvblRvcCIsIm9mZnNldFRvcCIsIm9wdGlvbkJvdHRvbSIsIl9zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSIsImZvY3VzZWRET00iLCJtZW51RE9NIiwiZm9jdXNlZFJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJtZW51UmVjdCIsImJvdHRvbSIsImNsaWVudEhlaWdodCIsInNjcm9sbE1lbnVJbnRvVmlldyIsIm1lbnVDb250YWluZXIiLCJtZW51Q29udGFpbmVyUmVjdCIsImlubmVySGVpZ2h0IiwibWVudUJ1ZmZlciIsInNjcm9sbEJ5IiwiY2xvc2VNZW51IiwidG9nZ2xlVG91Y2hPdXRzaWRlRXZlbnQiLCJoYW5kbGVyIiwib25PcGVuIiwib25DbG9zZSIsImVuYWJsZWQiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImhhbmRsZVRvdWNoT3V0c2lkZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZXRhY2hFdmVudCIsIndyYXBwZXIiLCJjb250YWlucyIsImJsdXJJbnB1dCIsImhhbmRsZVRvdWNoRW5kQ2xlYXJWYWx1ZSIsImNsZWFyVmFsdWUiLCJzZWFyY2hhYmxlIiwidG9PcGVuIiwiX2ZvY3VzQWZ0ZXJDbGVhciIsIl9vcGVuQWZ0ZXJGb2N1cyIsIm9wZW5PbkNsaWNrIiwiaGFuZGxlTW91c2VEb3duT25BcnJvdyIsImhhbmRsZU1vdXNlRG93bk9uTWVudSIsIm9uQ2xvc2VSZXNldHNJbnB1dCIsImhhbmRsZUlucHV0Rm9jdXMiLCJvcGVuT25Gb2N1cyIsImhhbmRsZUlucHV0Qmx1ciIsImFjdGl2ZUVsZW1lbnQiLCJvbkJsdXIiLCJvbkJsdXJyZWRTdGF0ZSIsIm9uQmx1clJlc2V0c0lucHV0IiwiaGFuZGxlSW5wdXRDaGFuZ2UiLCJuZXdJbnB1dFZhbHVlIiwic2V0SW5wdXRWYWx1ZSIsIm5ld1ZhbHVlIiwib25JbnB1dENoYW5nZSIsIm5leHRTdGF0ZSIsImhhbmRsZUtleURvd24iLCJvbklucHV0S2V5RG93biIsImRlZmF1bHRQcmV2ZW50ZWQiLCJrZXlDb2RlIiwiYmFja3NwYWNlUmVtb3ZlcyIsInBvcFZhbHVlIiwic2hpZnRLZXkiLCJ0YWJTZWxlY3RzVmFsdWUiLCJzZWxlY3RGb2N1c2VkT3B0aW9uIiwiZm9jdXNOZXh0T3B0aW9uIiwiY2xlYXJhYmxlIiwiZXNjYXBlQ2xlYXJzVmFsdWUiLCJmb2N1c1ByZXZpb3VzT3B0aW9uIiwiZm9jdXNQYWdlVXBPcHRpb24iLCJmb2N1c1BhZ2VEb3duT3B0aW9uIiwiZm9jdXNFbmRPcHRpb24iLCJmb2N1c1N0YXJ0T3B0aW9uIiwiZGVsZXRlUmVtb3ZlcyIsImhhbmRsZVZhbHVlQ2xpY2siLCJvblZhbHVlQ2xpY2siLCJoYW5kbGVNZW51U2Nyb2xsIiwib25NZW51U2Nyb2xsVG9Cb3R0b20iLCJzY3JvbGxIZWlnaHQiLCJnZXRPcHRpb25MYWJlbCIsIm9wIiwic3BsaXQiLCJkZWxpbWl0ZXIiLCJBcnJheSIsImlzQXJyYXkiLCJleHBhbmRlZFZhbHVlIiwic2V0VmFsdWUiLCJfdGhpczIiLCJhdXRvQmx1ciIsInNpbXBsZVZhbHVlIiwiam9pbiIsIl90aGlzMyIsImNsb3NlT25TZWxlY3QiLCJ1cGRhdGVkVmFsdWUiLCJmb2N1c2VkSW5kZXgiLCJhZGRWYWx1ZSIsInZpc2libGVPcHRpb25zIiwiX3Zpc2libGVPcHRpb25zIiwidmFsIiwibGFzdFZhbHVlSW5kZXgiLCJjb25jYXQiLCJjbGVhcmFibGVWYWx1ZSIsInNsaWNlIiwiX3RoaXM0IiwiZ2V0UmVzZXRWYWx1ZSIsInJlc2V0VmFsdWUiLCJmb2N1c0FkamFjZW50T3B0aW9uIiwiZGlyIiwiaW5kZXgiLCJuZXdTdGF0ZSIsIl9mb2N1c2VkT3B0aW9uIiwicG90ZW50aWFsSW5kZXgiLCJwYWdlU2l6ZSIsIl9wb3RlbnRpYWxJbmRleCIsImdldEZvY3VzZWRPcHRpb24iLCJyZW5kZXJMb2FkaW5nIiwiaXNMb2FkaW5nIiwicmVuZGVyVmFsdWUiLCJfdGhpczUiLCJ2YWx1ZVJlbmRlcmVyIiwiVmFsdWVDb21wb25lbnQiLCJ2YWx1ZUNvbXBvbmVudCIsInNob3dQbGFjZWhvbGRlciIsInNob3VsZFNob3dQbGFjZWhvbGRlciIsInNob3VsZFNob3dWYWx1ZSIsInJlbmRlcklucHV0IiwiZm9jdXNlZE9wdGlvbkluZGV4IiwiX2NsYXNzTmFtZXMiLCJfdGhpczYiLCJhcmlhT3ducyIsInRhYkluZGV4IiwiaW5wdXRSZW5kZXJlciIsImRpdlByb3BzIiwiX2FyaWFPd25zIiwiYm9yZGVyIiwiYXV0b3NpemUiLCJBIiwicmVuZGVyQ2xlYXIiLCJhcmlhTGFiZWwiLCJjbGVhckFsbFRleHQiLCJjbGVhclZhbHVlVGV4dCIsImNsZWFyIiwicmVuZGVyQXJyb3ciLCJhcnJvdyIsImZpbHRlck9wdGlvbnMkJDEiLCJyZW5kZXJNZW51Iiwibm9SZXN1bHRzVGV4dCIsInJlbmRlckhpZGRlbkZpZWxkIiwiX3RoaXM3IiwibmFtZSIsImpvaW5WYWx1ZXMiLCJfcmVmMyIsIml0ZW0iLCJnZXRGb2N1c2FibGVPcHRpb25JbmRleCIsInNlbGVjdGVkT3B0aW9uIiwiaXNPcHRpb25FcXVhbCIsInJlbmRlck91dGVyIiwiX3RoaXM4IiwiX3JlZjUiLCJtZW51Q29udGFpbmVyU3R5bGUiLCJvblNjcm9sbCIsIl9yZWY0IiwibWVudVN0eWxlIiwiX3RoaXM5IiwicmVtb3ZlU2VsZWN0ZWQiLCJydGwiLCJyZW1vdmVNZXNzYWdlIiwiYmFja3NwYWNlVG9SZW1vdmVNZXNzYWdlIiwiX3JlZjciLCJfcmVmNiIsImNvbnRyb2wiLCJvbktleURvd24iLCJhdXRvbG9hZCIsImNhY2hlIiwibG9hZE9wdGlvbnMiLCJsb2FkaW5nUGxhY2Vob2xkZXIiLCJzZWFyY2hQcm9tcHRUZXh0IiwiZGVmYXVsdENhY2hlIiwiZGVmYXVsdENoaWxkcmVuIiwiQXN5bmMiLCJjb250ZXh0IiwiX2NhY2hlIiwiX2NhbGxiYWNrIiwiY2FsbGJhY2siLCJlcnJvciIsImRhdGEiLCJwcm9taXNlIiwidHJhbnNmb3JtZWRJbnB1dFZhbHVlIiwiX3Byb3BzMiIsIl9zdGF0ZSIsIl9wcm9wczMiLCJfc3RhdGUyIiwiQ3JlYXRhYmxlU2VsZWN0Iiwib25PcHRpb25TZWxlY3QiLCJjcmVhdGVOZXdPcHRpb24iLCJpc1ZhbGlkTmV3T3B0aW9uIiwibmV3T3B0aW9uQ3JlYXRvciIsIm9uTmV3T3B0aW9uQ2xpY2siLCJfcHJvcHMkb3B0aW9ucyIsImlzT3B0aW9uVW5pcXVlIiwidW5zaGlmdCIsInByb21wdFRleHRDcmVhdG9yIiwiZmlsdGVyZWRPcHRpb25zIiwiYXBwbHkiLCJfbmV3T3B0aW9uQ3JlYXRvciIsInByb21wdCIsIl9jcmVhdGVQbGFjZWhvbGRlck9wdGlvbiIsIm1lbnVSZW5kZXJlciQkMSIsInBhcmFtcyIsInNob3VsZEtleURvd25FdmVudENyZWF0ZU5ld09wdGlvbiIsIl9wcm9wczQiLCJyZWZQcm9wIiwicmVzdFByb3BzIiwiZGVmYXVsdENoaWxkcmVuJDIiLCJhbGxvd0NyZWF0ZSIsImV4aXN0aW5nT3B0aW9uIiwiQXN5bmNDcmVhdGFibGVTZWxlY3QiLCJhc3luY1Byb3BzIiwiYXN5bmNSZWYiLCJjcmVhdGFibGVQcm9wcyIsImNyZWF0YWJsZVJlZiIsIkFzeW5jQ3JlYXRhYmxlIiwiQ3JlYXRhYmxlIiwiaGFzT3duIiwiY2xhc3NOYW1lcyIsImNsYXNzZXMiLCJhcmdUeXBlIiwicHVzaCIsImlubmVyIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==