-
Notifications
You must be signed in to change notification settings - Fork 0
/
slider.js
8 lines (8 loc) · 497 KB
/
slider.js
1
2
3
4
5
6
7
8
!function(I){function g(B){if(C[B])return C[B].exports;var Q=C[B]={exports:{},id:B,loaded:!1};return I[B].call(Q.exports,Q,Q.exports,g),Q.loaded=!0,Q.exports}var C={};return g.m=I,g.c=C,g.p="/",g(0)}([function(module,exports,__webpack_require__){eval("'use strict';\n\nvar _anm = __webpack_require__(73);\n\nvar _anm2 = _interopRequireDefault(_anm);\n\nvar _Q = __webpack_require__(72);\n\nvar _Q2 = _interopRequireDefault(_Q);\n\nvar _es6Promise = __webpack_require__(85);\n\nvar promise = _interopRequireWildcard(_es6Promise);\n\nvar _fetchIe = __webpack_require__(89);\n\nvar fetch = _interopRequireWildcard(_fetchIe);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// 神特么safari不支持fetch\n// 动画\nwindow.Promise = window.Promise || promise.Promise;\n// Q 基础库\n\nwindow.fetch = window.fetch || fetch;\n\nvar localTagKey = 'yilia-tag';\nvar localSearchKey = 'yilia-search';\n\nfunction fixzero(str) {\n\tstr = str + '';\n\treturn str.length === 1 ? '0' + str : str;\n}\n\nfunction init() {\n\tvar app = new _Q2.default({\n\t\tel: '#container',\n\t\tdata: {\n\t\t\tisCtnShow: false,\n\t\t\tisShow: 0,\n\t\t\tinnerArchive: false,\n\t\t\tfriends: false,\n\t\t\taboutme: false,\n\t\t\titems: [],\n\t\t\tjsonFail: false,\n\t\t\tshowTags: false,\n\t\t\tsearch: ''\n\t\t},\n\t\tmethods: {\n\t\t\tstop: function stop(e) {\n\t\t\t\te.stopPropagation();\n\t\t\t},\n\t\t\tchoseTag: function choseTag(e, name) {\n\t\t\t\tapp.$set('search', '#' + (name ? name : e.target.innerHTML));\n\t\t\t},\n\t\t\tclearChose: function clearChose(e) {\n\t\t\t\tapp.$set('search', '');\n\t\t\t},\n\t\t\ttoggleTag: function toggleTag(e) {\n\t\t\t\tapp.$set('showTags', !app.showTags);\n\t\t\t\twindow.localStorage && window.localStorage.setItem(localTagKey, app.showTags);\n\t\t\t},\n\t\t\topenSlider: function openSlider(e, type) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t// innerArchive: '所有文章'\n\t\t\t\t// friends: '友情链接'\n\t\t\t\t// aboutme: '关于我'\n\t\t\t\tapp.$set('innerArchive', false);\n\t\t\t\tapp.$set('friends', false);\n\t\t\t\tapp.$set('aboutme', false);\n\t\t\t\tapp.$set(type, true);\n\t\t\t\tapp.$set('isShow', true);\n\t\t\t\tapp.$set('isCtnShow', true);\n\t\t\t}\n\t\t},\n\t\tfilters: {\n\t\t\tisFalse: function isFalse(val) {\n\t\t\t\treturn val === false;\n\t\t\t},\n\t\t\tisEmptyStr: function isEmptyStr(str) {\n\t\t\t\treturn str === '';\n\t\t\t},\n\t\t\tisNotEmptyStr: function isNotEmptyStr(str) {\n\t\t\t\treturn str !== '';\n\t\t\t},\n\t\t\turlformat: function urlformat(str) {\n\t\t\t\treturn '/' + str;\n\t\t\t},\n\t\t\ttagformat: function tagformat(str) {\n\t\t\t\treturn '#' + str;\n\t\t\t},\n\t\t\tdateformat: function dateformat(str) {\n\t\t\t\tvar d = new Date(str);\n\t\t\t\treturn d.getFullYear() + '-' + fixzero(d.getMonth() + 1) + '-' + fixzero(d.getDate());\n\t\t\t}\n\t\t},\n\t\tready: function ready() {}\n\t});\n\n\tfunction handleSearch(val) {\n\t\tval = val || '';\n\t\tvar type = 'title';\n\t\tif (val.indexOf('#') === 0) {\n\t\t\tval = val.substr(1, val.length);\n\t\t\ttype = 'tag';\n\t\t}\n\t\tvar items = app.items;\n\t\titems.forEach(function (item) {\n\t\t\tvar matchTitle = false;\n\t\t\tif (item.title.indexOf(val) > -1) {\n\t\t\t\tmatchTitle = true;\n\t\t\t}\n\n\t\t\tvar matchTags = false;\n\t\t\titem.tags.forEach(function (tag) {\n\t\t\t\tif (tag.name.indexOf(val) > -1) {\n\t\t\t\t\tmatchTags = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (type === 'title' && matchTitle || type === 'tag' && matchTags) {\n\t\t\t\titem.isShow = true;\n\t\t\t} else {\n\t\t\t\titem.isShow = false;\n\t\t\t}\n\t\t});\n\t\tapp.$set('items', items);\n\t}\n\n\tapp.$watch('search', function (val, oldVal) {\n\t\twindow.localStorage && window.localStorage.setItem(localSearchKey, val);\n\t\thandleSearch(val);\n\t});\n\n\twindow.fetch('/content.json?t=' + +new Date(), {\n\t\tmethod: 'get'\n\t}).then(function (res) {\n\t\treturn res.json();\n\t}).then(function (data) {\n\t\tdata.forEach(function (em) {\n\t\t\tem.isShow = true;\n\t\t});\n\t\tapp.$set('items', data);\n\t\t// 搜索\n\t\tvar searchWording = window.localStorage && window.localStorage.getItem(localSearchKey) || '';\n\t\tapp.$set('search', searchWording);\n\t\tsearchWording !== '' && handleSearch(searchWording);\n\t}).catch(function (err) {\n\t\tapp.$set('jsonFail', true);\n\t});\n\n\t// 隐藏\n\tdocument.querySelector('#container').onclick = function (e) {\n\t\tif (app.isShow) {\n\t\t\tapp.$set('isShow', false);\n\t\t\tsetTimeout(function () {\n\t\t\t\tapp.$set('isCtnShow', false);\n\t\t\t}, 300);\n\t\t}\n\t};\n\n\t// tag 显示/隐藏\n\tvar isTagOn = window.localStorage && window.localStorage.getItem(localTagKey) || 'false';\n\tapp.$set('showTags', JSON.parse(isTagOn));\n\n\t// 其他标签点击\n\t// 标签\n\tvar $tags = document.querySelectorAll('.tagcloud a');\n\t$tags.forEach(function ($em) {\n\t\t$em.setAttribute('href', 'javascript:void(0)');\n\t\t$em.onclick = function (e) {\n\t\t\te.stopPropagation();\n\t\t\tapp.$set('innerArchive', true);\n\t\t\tapp.$set('friends', false);\n\t\t\tapp.$set('aboutme', false);\n\t\t\tapp.$set('isShow', true);\n\t\t\tapp.$set('isCtnShow', true);\n\t\t\tapp.$set('search', '#' + $em.innerHTML);\n\t\t};\n\t});\n}\n\ninit();\n_anm2.default.init();\n\nmodule.exports = {};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Utc3JjL2pzL3NsaWRlci5qcz8wYjYwIl0sIm5hbWVzIjpbInByb21pc2UiLCJmZXRjaCIsIndpbmRvdyIsIlByb21pc2UiLCJsb2NhbFRhZ0tleSIsImxvY2FsU2VhcmNoS2V5IiwiZml4emVybyIsInN0ciIsImxlbmd0aCIsImluaXQiLCJhcHAiLCJlbCIsImRhdGEiLCJpc0N0blNob3ciLCJpc1Nob3ciLCJpbm5lckFyY2hpdmUiLCJmcmllbmRzIiwiYWJvdXRtZSIsIml0ZW1zIiwianNvbkZhaWwiLCJzaG93VGFncyIsInNlYXJjaCIsIm1ldGhvZHMiLCJzdG9wIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImNob3NlVGFnIiwibmFtZSIsIiRzZXQiLCJ0YXJnZXQiLCJpbm5lckhUTUwiLCJjbGVhckNob3NlIiwidG9nZ2xlVGFnIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIm9wZW5TbGlkZXIiLCJ0eXBlIiwiZmlsdGVycyIsImlzRmFsc2UiLCJ2YWwiLCJpc0VtcHR5U3RyIiwiaXNOb3RFbXB0eVN0ciIsInVybGZvcm1hdCIsInRhZ2Zvcm1hdCIsImRhdGVmb3JtYXQiLCJkIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwicmVhZHkiLCJoYW5kbGVTZWFyY2giLCJpbmRleE9mIiwic3Vic3RyIiwiZm9yRWFjaCIsIml0ZW0iLCJtYXRjaFRpdGxlIiwidGl0bGUiLCJtYXRjaFRhZ3MiLCJ0YWdzIiwidGFnIiwiJHdhdGNoIiwib2xkVmFsIiwibWV0aG9kIiwidGhlbiIsInJlcyIsImpzb24iLCJlbSIsInNlYXJjaFdvcmRpbmciLCJnZXRJdGVtIiwiY2F0Y2giLCJlcnIiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJvbmNsaWNrIiwic2V0VGltZW91dCIsImlzVGFnT24iLCJKU09OIiwicGFyc2UiLCIkdGFncyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCIkZW0iLCJzZXRBdHRyaWJ1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bnRlbnQiOlsiLy8g5Yqo55S7XG5pbXBvcnQgQW5tIGZyb20gJy4vYW5tJ1xuLy8gUSDln7rnoYDlupNcbmltcG9ydCBRIGZyb20gJy4vUSdcbi8vIOelnueJueS5iHNhZmFyaeS4jeaUr+aMgWZldGNoXG5pbXBvcnQgKiBhcyBwcm9taXNlIGZyb20gJ2VzNi1wcm9taXNlJ1xuaW1wb3J0ICogYXMgZmV0Y2ggZnJvbSAnZmV0Y2gtaWU4J1xuXG53aW5kb3cuUHJvbWlzZSA9IHdpbmRvdy5Qcm9taXNlIHx8IHByb21pc2UuUHJvbWlzZVxud2luZG93LmZldGNoID0gd2luZG93LmZldGNoIHx8IGZldGNoXG5cbmxldCBsb2NhbFRhZ0tleSA9ICd5aWxpYS10YWcnXG5sZXQgbG9jYWxTZWFyY2hLZXkgPSAneWlsaWEtc2VhcmNoJ1xuXG5mdW5jdGlvbiBmaXh6ZXJvKHN0cikge1xuXHRzdHIgPSBzdHIgKyAnJ1xuXHRyZXR1cm4gc3RyLmxlbmd0aCA9PT0gMSA/ICcwJyArIHN0ciA6IHN0clxufVxuXG5mdW5jdGlvbiBpbml0KCkge1xuXHRsZXQgYXBwID0gbmV3IFEoe1xuXHQgICAgZWw6ICcjY29udGFpbmVyJyxcblx0ICAgIGRhdGE6IHtcblx0XHRcdGlzQ3RuU2hvdzogZmFsc2UsXG5cdFx0XHRpc1Nob3c6IDAsXG5cdFx0XHRpbm5lckFyY2hpdmU6IGZhbHNlLFxuXHRcdFx0ZnJpZW5kczogZmFsc2UsXG5cdFx0XHRhYm91dG1lOiBmYWxzZSxcblx0XHRcdGl0ZW1zOiBbXSxcblx0XHRcdGpzb25GYWlsOiBmYWxzZSxcblx0XHRcdHNob3dUYWdzOiBmYWxzZSxcblx0XHRcdHNlYXJjaDogJydcblx0XHR9LFxuXHQgICAgbWV0aG9kczoge1xuXHQgICAgXHRzdG9wOiAoZSkgPT4ge1xuXHQgICAgXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0ICAgIFx0fSxcblx0ICAgIFx0Y2hvc2VUYWc6IChlLCBuYW1lKSA9PiB7XG5cdCAgICBcdFx0YXBwLiRzZXQoJ3NlYXJjaCcsICcjJyArIChuYW1lID8gbmFtZSA6IGUudGFyZ2V0LmlubmVySFRNTCkpXG5cdCAgICBcdH0sXG5cdCAgICBcdGNsZWFyQ2hvc2U6IChlKSA9PiB7XG5cdCAgICBcdFx0YXBwLiRzZXQoJ3NlYXJjaCcsICcnKVxuXHQgICAgXHR9LFxuXHQgICAgXHR0b2dnbGVUYWc6IChlKSA9PiB7XG5cdCAgICBcdFx0YXBwLiRzZXQoJ3Nob3dUYWdzJywgIWFwcC5zaG93VGFncylcblx0ICAgIFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShsb2NhbFRhZ0tleSwgYXBwLnNob3dUYWdzKVxuXHQgICAgXHR9LFxuXHQgICAgICAgIG9wZW5TbGlkZXI6IChlLCB0eXBlKSA9PiB7XG5cdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0Ly8gaW5uZXJBcmNoaXZlOiAn5omA5pyJ5paH56ugJ1xuICBcdFx0XHRcdC8vIGZyaWVuZHM6ICflj4vmg4Xpk77mjqUnXG4gIFx0XHRcdFx0Ly8gYWJvdXRtZTogJ+WFs+S6juaIkSdcbiAgXHRcdFx0XHRhcHAuJHNldCgnaW5uZXJBcmNoaXZlJywgZmFsc2UpXG4gIFx0XHRcdFx0YXBwLiRzZXQoJ2ZyaWVuZHMnLCBmYWxzZSlcbiAgXHRcdFx0XHRhcHAuJHNldCgnYWJvdXRtZScsIGZhbHNlKVxuICBcdFx0XHRcdGFwcC4kc2V0KHR5cGUsIHRydWUpXG4gIFx0XHRcdFx0YXBwLiRzZXQoJ2lzU2hvdycsIHRydWUpXG4gIFx0XHRcdFx0YXBwLiRzZXQoJ2lzQ3RuU2hvdycsIHRydWUpXG5cdFx0XHR9XG5cdCAgICB9LFxuXHQgICAgZmlsdGVyczoge1xuXHQgICAgXHRpc0ZhbHNlOiAodmFsKSA9PiB7XG5cdCAgICBcdFx0cmV0dXJuIHZhbCA9PT0gZmFsc2Vcblx0ICAgIFx0fSxcblx0ICAgIFx0aXNFbXB0eVN0cjogKHN0cikgPT4ge1xuXHQgICAgXHRcdHJldHVybiBzdHIgPT09ICcnXG5cdCAgICBcdH0sXG5cdCAgICBcdGlzTm90RW1wdHlTdHI6IChzdHIpID0+IHtcblx0ICAgIFx0XHRyZXR1cm4gc3RyICE9PSAnJ1xuXHQgICAgXHR9LFxuXHQgICAgXHR1cmxmb3JtYXQ6IChzdHIpID0+IHtcblx0ICAgIFx0XHRyZXR1cm4gJy8nICsgc3RyXG5cdCAgICBcdH0sXG5cdCAgICBcdHRhZ2Zvcm1hdDogKHN0cikgPT4ge1xuXHQgICAgXHRcdHJldHVybiAnIycgKyBzdHJcblx0ICAgIFx0fSxcblx0ICAgIFx0ZGF0ZWZvcm1hdDogKHN0cikgPT4ge1xuXHQgICAgXHRcdGxldCBkID0gbmV3IERhdGUoc3RyKVxuXHQgICAgXHRcdHJldHVybiBkLmdldEZ1bGxZZWFyKCkgKyAnLScgKyBmaXh6ZXJvKChkLmdldE1vbnRoKCkgKyAxKSkgKyAnLScgKyBmaXh6ZXJvKGQuZ2V0RGF0ZSgpKVxuXHQgICAgXHR9XG5cdCAgICB9LFxuXHQgICAgcmVhZHk6ICgpID0+IHtcblx0ICAgIH1cblx0fSlcblxuXHRmdW5jdGlvbiBoYW5kbGVTZWFyY2godmFsKSB7XG5cdFx0dmFsID0gdmFsIHx8ICcnXG5cdFx0bGV0IHR5cGUgPSAndGl0bGUnXG5cdFx0aWYgKHZhbC5pbmRleE9mKCcjJykgPT09IDApIHtcblx0XHRcdHZhbCA9IHZhbC5zdWJzdHIoMSwgdmFsLmxlbmd0aClcblx0XHRcdHR5cGUgPSAndGFnJ1xuXHRcdH1cblx0XHRsZXQgaXRlbXMgPSBhcHAuaXRlbXNcblx0ICBcdGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcblx0ICBcdFx0bGV0IG1hdGNoVGl0bGUgPSBmYWxzZVxuXHQgIFx0XHRpZiAoaXRlbS50aXRsZS5pbmRleE9mKHZhbCkgPiAtMSkge1xuXHQgIFx0XHRcdG1hdGNoVGl0bGUgPSB0cnVlXG5cdCAgXHRcdH1cblxuXHQgIFx0XHRsZXQgbWF0Y2hUYWdzID0gZmFsc2Vcblx0ICBcdFx0aXRlbS50YWdzLmZvckVhY2goKHRhZykgPT4ge1xuXHQgIFx0XHRcdGlmICh0YWcubmFtZS5pbmRleE9mKHZhbCkgPiAtMSkge1xuXHQgICAgICBcdFx0XHRtYXRjaFRhZ3MgPSB0cnVlXG5cdCAgICAgIFx0XHR9XG5cdCAgXHRcdH0pXG5cblx0ICBcdFx0aWYgKCh0eXBlID09PSAndGl0bGUnICYmIG1hdGNoVGl0bGUpIHx8ICh0eXBlID09PSAndGFnJyAmJiBtYXRjaFRhZ3MpKSB7XG5cdCAgXHRcdFx0aXRlbS5pc1Nob3cgPSB0cnVlXG5cdCAgXHRcdH0gZWxzZSB7XG5cdCAgXHRcdFx0aXRlbS5pc1Nob3cgPSBmYWxzZVxuXHQgIFx0XHR9XG5cdCAgXHR9KVxuXHQgIFx0YXBwLiRzZXQoJ2l0ZW1zJywgaXRlbXMpXG5cdH1cblxuXHRhcHAuJHdhdGNoKCdzZWFyY2gnLCBmdW5jdGlvbih2YWwsIG9sZFZhbCl7XG5cdFx0d2luZG93LmxvY2FsU3RvcmFnZSAmJiB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0obG9jYWxTZWFyY2hLZXksIHZhbClcblx0XHRoYW5kbGVTZWFyY2godmFsKVxuICAgIH0pXG5cblx0d2luZG93LmZldGNoKCcvY29udGVudC5qc29uP3Q9JyArICgrIG5ldyBEYXRlKCkpLCB7XG5cdFx0bWV0aG9kOiAnZ2V0Jyxcblx0fSkudGhlbigocmVzKSA9PiB7XG5cdFx0cmV0dXJuIHJlcy5qc29uKClcblx0fSkudGhlbigoZGF0YSkgPT4ge1xuXHRcdGRhdGEuZm9yRWFjaCgoZW0pID0+IHtcblx0XHRcdGVtLmlzU2hvdyA9IHRydWVcblx0XHR9KVxuXHRcdGFwcC4kc2V0KCdpdGVtcycsIGRhdGEpXG5cdFx0Ly8g5pCc57SiXG5cdFx0bGV0IHNlYXJjaFdvcmRpbmcgPSAod2luZG93LmxvY2FsU3RvcmFnZSAmJiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0obG9jYWxTZWFyY2hLZXkpKSB8fCAnJ1xuXHRcdGFwcC4kc2V0KCdzZWFyY2gnLCBzZWFyY2hXb3JkaW5nKVxuXHRcdHNlYXJjaFdvcmRpbmcgIT09ICcnICYmIGhhbmRsZVNlYXJjaChzZWFyY2hXb3JkaW5nKVxuXHR9KS5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0YXBwLiRzZXQoJ2pzb25GYWlsJywgdHJ1ZSlcblx0fSk7XG5cblx0Ly8g6ZqQ6JePXG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjb250YWluZXInKS5vbmNsaWNrID0gKGUpID0+IHtcblx0XHRpZiAoYXBwLmlzU2hvdykge1xuXHRcdFx0YXBwLiRzZXQoJ2lzU2hvdycsIGZhbHNlKVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGFwcC4kc2V0KCdpc0N0blNob3cnLCBmYWxzZSlcblx0XHRcdH0sIDMwMClcblx0XHR9XG5cdH1cblxuXHQvLyB0YWcg5pi+56S6L+makOiXj1xuXHRsZXQgaXNUYWdPbiA9ICh3aW5kb3cubG9jYWxTdG9yYWdlICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFRhZ0tleSkpIHx8ICdmYWxzZSdcblx0YXBwLiRzZXQoJ3Nob3dUYWdzJywgSlNPTi5wYXJzZShpc1RhZ09uKSlcblxuXHQvLyDlhbbku5bmoIfnrb7ngrnlh7tcblx0Ly8g5qCH562+XG5cdGxldCAkdGFncyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50YWdjbG91ZCBhJylcblx0JHRhZ3MuZm9yRWFjaCgoJGVtKSA9PiB7XG5cdFx0JGVtLnNldEF0dHJpYnV0ZSgnaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCknKVxuXHRcdCRlbS5vbmNsaWNrID0gKGUpID0+IHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdGFwcC4kc2V0KCdpbm5lckFyY2hpdmUnLCB0cnVlKVxuXHRcdFx0YXBwLiRzZXQoJ2ZyaWVuZHMnLCBmYWxzZSlcblx0XHRcdGFwcC4kc2V0KCdhYm91dG1lJywgZmFsc2UpXG5cdFx0XHRhcHAuJHNldCgnaXNTaG93JywgdHJ1ZSlcblx0XHRcdGFwcC4kc2V0KCdpc0N0blNob3cnLCB0cnVlKVxuXHRcdFx0YXBwLiRzZXQoJ3NlYXJjaCcsICcjJyArICRlbS5pbm5lckhUTUwpXG5cdFx0fVxuXHR9KVxufVxuXG5pbml0KClcbkFubS5pbml0KClcblxubW9kdWxlLmV4cG9ydHMgPSB7fVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NvdXJjZS1zcmMvanMvc2xpZGVyLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanM/NzdhYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGYgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYodHlwZW9mIF9fZyA9PSAnbnVtYmVyJylfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports){eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n return hasOwnProperty.call(it, key);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanM/ZDg1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBIiwiZmlsZSI6IjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIGtleSl7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(50)\n , defined = __webpack_require__(15);\nmodule.exports = function(it){\n return IObject(defined(it));\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzPzY5NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpXG4gICwgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(8)(function(){\n return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcz83MDUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxpQ0FBaUMsUUFBUSxnQkFBZ0IsVUFBVSxHQUFHO0FBQ3RFLENBQUMiLCJmaWxlIjoiNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7Z2V0OiBmdW5jdGlvbigpeyByZXR1cm4gNzsgfX0pLmEgIT0gNztcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(6)\n , createDesc = __webpack_require__(13);\nmodule.exports = __webpack_require__(4) ? function(object, key, value){\n return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n object[key] = value;\n return object;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzP2E2ZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBIiwiZmlsZSI6IjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZFAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uKG9iamVjdCwga2V5LCB2YWx1ZSl7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzXG4vLyBtb2R1bGUgaWQgPSA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(10)\n , IE8_DOM_DEFINE = __webpack_require__(30)\n , toPrimitive = __webpack_require__(24)\n , dP = Object.defineProperty;\n\nexports.f = __webpack_require__(4) ? Object.defineProperty : function defineProperty(O, P, Attributes){\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if(IE8_DOM_DEFINE)try {\n return dP(O, P, Attributes);\n } catch(e){ /* empty */ }\n if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n if('value' in Attributes)O[P] = Attributes.value;\n return O;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanM/NDExNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFVBQVU7QUFDYjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJylcbiAgLCB0b1ByaW1pdGl2ZSAgICA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpXG4gICwgZFAgICAgICAgICAgICAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKXtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmKElFOF9ET01fREVGSU5FKXRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIGlmKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcyl0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZigndmFsdWUnIGluIEF0dHJpYnV0ZXMpT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qc1xuLy8gbW9kdWxlIGlkID0gNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("var store = __webpack_require__(22)('wks')\n , uid = __webpack_require__(14)\n , Symbol = __webpack_require__(1).Symbol\n , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MuanM/MzAyNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiI3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHN0b3JlICAgICAgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJylcbiAgLCB1aWQgICAgICAgID0gcmVxdWlyZSgnLi9fdWlkJylcbiAgLCBTeW1ib2wgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sXG4gICwgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKXtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MuanNcbi8vIG1vZHVsZSBpZCA9IDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports){eval("module.exports = function(exec){\n try {\n return !!exec();\n } catch(e){\n return true;\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcz85MzVkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EiLCJmaWxlIjoiOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZXhlYyl7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanNcbi8vIG1vZHVsZSBpZCA9IDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(35)\n , enumBugKeys = __webpack_require__(16);\n\nmodule.exports = Object.keys || function keys(O){\n return $keys(O, enumBugKeys);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcz9mNWJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKVxuICAsIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTyl7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanNcbi8vIG1vZHVsZSBpZCA9IDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(12);\nmodule.exports = function(it){\n if(!isObject(it))throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanM/MGRhMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoIWlzT2JqZWN0KGl0KSl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzPzFiNjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkJBQTZCO0FBQzdCLHFDQUFxQyIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7dmVyc2lvbjogJzIuNC4wJ307XG5pZih0eXBlb2YgX19lID09ICdudW1iZXInKV9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanNcbi8vIG1vZHVsZSBpZCA9IDExXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("module.exports = function(it){\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanM/MjRjOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDEyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==");
},function(module,exports){eval("module.exports = function(bitmap, value){\n return {\n enumerable : !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable : !(bitmap & 4),\n value : value\n };\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzPzFlODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYml0bWFwLCB2YWx1ZSl7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZSAgOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZSAgICA6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWUgICAgICAgOiB2YWx1ZVxuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanNcbi8vIG1vZHVsZSBpZCA9IDEzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("var id = 0\n , px = Math.random();\nmodule.exports = function(key){\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanM/ZThjZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlkID0gMFxuICAsIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanNcbi8vIG1vZHVsZSBpZCA9IDE0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval('// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n if(it == undefined)throw TypeError("Can\'t call method on " + it);\n return it;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzPzQ1ZDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanNcbi8vIG1vZHVsZSBpZCA9IDE1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==')},function(module,exports){eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzPzc1OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanNcbi8vIG1vZHVsZSBpZCA9IDE2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("module.exports = {};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyYXRvcnMuanM/YWZmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge307XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyYXRvcnMuanNcbi8vIG1vZHVsZSBpZCA9IDE3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("module.exports = true;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzPzJjODAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzXG4vLyBtb2R1bGUgaWQgPSAxOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports){eval("exports.f = {}.propertyIsEnumerable;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzP2QwZDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qc1xuLy8gbW9kdWxlIGlkID0gMTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("var def = __webpack_require__(6).f\n , has = __webpack_require__(2)\n , TAG = __webpack_require__(7)('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcz9jOTQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtFQUFrRSwrQkFBK0I7QUFDakciLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZlxuICAsIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIHRhZywgc3RhdCl7XG4gIGlmKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpZGVmKGl0LCBUQUcsIHtjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWd9KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qc1xuLy8gbW9kdWxlIGlkID0gMjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("var shared = __webpack_require__(22)('keys')\n , uid = __webpack_require__(14);\nmodule.exports = function(key){\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzPzJhNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpXG4gICwgdWlkICAgID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qc1xuLy8gbW9kdWxlIGlkID0gMjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(1)\n , SHARED = '__core-js_shared__'\n , store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n return store[key] || (store[key] = {});\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanM/N2I2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0EsdUNBQXVDO0FBQ3ZDIiwiZmlsZSI6IjIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXydcbiAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0ge30pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports){eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil\n , floor = Math.floor;\nmodule.exports = function(it){\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzP2Y2NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCAgPSBNYXRoLmNlaWxcbiAgLCBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qc1xuLy8gbW9kdWxlIGlkID0gMjNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(12);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n if(!isObject(it))return it;\n var fn, val;\n if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanM/NDlhNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBTKXtcbiAgaWYoIWlzT2JqZWN0KGl0KSlyZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZihTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIGlmKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpcmV0dXJuIHZhbDtcbiAgaWYoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qc1xuLy8gbW9kdWxlIGlkID0gMjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(1)\n , core = __webpack_require__(11)\n , LIBRARY = __webpack_require__(18)\n , wksExt = __webpack_require__(26)\n , defineProperty = __webpack_require__(6).f;\nmodule.exports = function(name){\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZGVmaW5lLmpzP2I2ZTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELHNCQUFzQjtBQUNoRixnRkFBZ0Ysc0JBQXNCO0FBQ3RHIiwiZmlsZSI6IjI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIExJQlJBUlkgICAgICAgID0gcmVxdWlyZSgnLi9fbGlicmFyeScpXG4gICwgd2tzRXh0ICAgICAgICAgPSByZXF1aXJlKCcuL193a3MtZXh0JylcbiAgLCBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG5hbWUpe1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZihuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKWRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHt2YWx1ZTogd2tzRXh0LmYobmFtZSl9KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZGVmaW5lLmpzXG4vLyBtb2R1bGUgaWQgPSAyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("exports.f = __webpack_require__(7);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZXh0LmpzPzZlZTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiMjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1leHQuanNcbi8vIG1vZHVsZSBpZCA9IDI2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(1)\n , core = __webpack_require__(11)\n , ctx = __webpack_require__(47)\n , hide = __webpack_require__(5)\n , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n var IS_FORCED = type & $export.F\n , IS_GLOBAL = type & $export.G\n , IS_STATIC = type & $export.S\n , IS_PROTO = type & $export.P\n , IS_BIND = type & $export.B\n , IS_WRAP = type & $export.W\n , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})\n , expProto = exports[PROTOTYPE]\n , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n , key, own, out;\n if(IS_GLOBAL)source = name;\n for(key in source){\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if(own && key in exports)continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function(C){\n var F = function(a, b, c){\n if(this instanceof C){\n switch(arguments.length){\n case 0: return new C;\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if(IS_PROTO){\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanM/ZWNlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FO0FBQ0EscUZBQXFGO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGdCQUFnQjtBQUNoQiIsImZpbGUiOiIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgICAgPSByZXF1aXJlKCcuL19nbG9iYWwnKVxuICAsIGNvcmUgICAgICA9IHJlcXVpcmUoJy4vX2NvcmUnKVxuICAsIGN0eCAgICAgICA9IHJlcXVpcmUoJy4vX2N0eCcpXG4gICwgaGlkZSAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgc291cmNlKXtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkZcbiAgICAsIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0LkdcbiAgICAsIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlNcbiAgICAsIElTX1BST1RPICA9IHR5cGUgJiAkZXhwb3J0LlBcbiAgICAsIElTX0JJTkQgICA9IHR5cGUgJiAkZXhwb3J0LkJcbiAgICAsIElTX1dSQVAgICA9IHR5cGUgJiAkZXhwb3J0LldcbiAgICAsIGV4cG9ydHMgICA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pXG4gICAgLCBleHBQcm90byAgPSBleHBvcnRzW1BST1RPVFlQRV1cbiAgICAsIHRhcmdldCAgICA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV1cbiAgICAsIGtleSwgb3duLCBvdXQ7XG4gIGlmKElTX0dMT0JBTClzb3VyY2UgPSBuYW1lO1xuICBmb3Ioa2V5IGluIHNvdXJjZSl7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZihvd24gJiYga2V5IGluIGV4cG9ydHMpY29udGludWU7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNvdXJjZVtrZXldO1xuICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNlc1xuICAgIGV4cG9ydHNba2V5XSA9IElTX0dMT0JBTCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJyA/IHNvdXJjZVtrZXldXG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICA6IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKVxuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG4gICAgOiBJU19XUkFQICYmIHRhcmdldFtrZXldID09IG91dCA/IChmdW5jdGlvbihDKXtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24oYSwgYiwgYyl7XG4gICAgICAgIGlmKHRoaXMgaW5zdGFuY2VvZiBDKXtcbiAgICAgICAgICBzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQztcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYoSVNfUFJPVE8pe1xuICAgICAgKGV4cG9ydHMudmlydHVhbCB8fCAoZXhwb3J0cy52aXJ0dWFsID0ge30pKVtrZXldID0gb3V0O1xuICAgICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLnByb3RvdHlwZS4lTkFNRSVcbiAgICAgIGlmKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0paGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWAgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanNcbi8vIG1vZHVsZSBpZCA9IDI3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("var toString = {}.toString;\n\nmodule.exports = function(it){\n return toString.call(it).slice(8, -1);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanM/NDhlYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQSIsImZpbGUiOiIyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanNcbi8vIG1vZHVsZSBpZCA9IDI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(12)\n , document = __webpack_require__(1).document\n // in old IE typeof document.createElement is 'object'\n , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n return is ? document.createElement(it) : {};\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzP2FiNDQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKVxuICAsIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnRcbiAgLy8gaW4gb2xkIElFIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnXG4gICwgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAyOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("module.exports = !__webpack_require__(4) && !__webpack_require__(8)(function(){\n return Object.defineProperty(__webpack_require__(29)('div'), 'a', {get: function(){ return 7; }}).a != 7;\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcz9iZDFmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EscUVBQXNFLGdCQUFnQixVQUFVLEdBQUc7QUFDbkcsQ0FBQyIsImZpbGUiOiIzMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("'use strict';\nvar LIBRARY = __webpack_require__(18)\n , $export = __webpack_require__(27)\n , redefine = __webpack_require__(36)\n , hide = __webpack_require__(5)\n , has = __webpack_require__(2)\n , Iterators = __webpack_require__(17)\n , $iterCreate = __webpack_require__(52)\n , setToStringTag = __webpack_require__(20)\n , getPrototypeOf = __webpack_require__(59)\n , ITERATOR = __webpack_require__(7)('iterator')\n , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n , FF_ITERATOR = '@@iterator'\n , KEYS = 'keys'\n , VALUES = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n $iterCreate(Constructor, NAME, next);\n var getMethod = function(kind){\n if(!BUGGY && kind in proto)return proto[kind];\n switch(kind){\n case KEYS: return function keys(){ return new Constructor(this, kind); };\n case VALUES: return function values(){ return new Constructor(this, kind); };\n } return function entries(){ return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator'\n , DEF_VALUES = DEFAULT == VALUES\n , VALUES_BUG = false\n , proto = Base.prototype\n , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n , $default = $native || getMethod(DEFAULT)\n , $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n , methods, key, IteratorPrototype;\n // Fix native\n if($anyNative){\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n if(IteratorPrototype !== Object.prototype){\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if(DEF_VALUES && $native && $native.name !== VALUES){\n VALUES_BUG = true;\n $default = function values(){ return $native.call(this); };\n }\n // Define iterator\n if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if(DEFAULT){\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if(FORCED)for(key in methods){\n if(!(key in proto))redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcz85YTk0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsYUFBYTs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxvQ0FBb0M7QUFDNUUsNENBQTRDLG9DQUFvQztBQUNoRixLQUFLLDJCQUEyQixvQ0FBb0M7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQTtBQUNBLGlDQUFpQywyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBIiwiZmlsZSI6IjMxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgICAgICAgID0gcmVxdWlyZSgnLi9fbGlicmFyeScpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIHJlZGVmaW5lICAgICAgID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKVxuICAsIGhpZGUgICAgICAgICAgID0gcmVxdWlyZSgnLi9faGlkZScpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIEl0ZXJhdG9ycyAgICAgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCAkaXRlckNyZWF0ZSAgICA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJylcbiAgLCBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJylcbiAgLCBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKVxuICAsIElURVJBVE9SICAgICAgID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBCVUdHWSAgICAgICAgICA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKSAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gICwgRkZfSVRFUkFUT1IgICAgPSAnQEBpdGVyYXRvcidcbiAgLCBLRVlTICAgICAgICAgICA9ICdrZXlzJ1xuICAsIFZBTFVFUyAgICAgICAgID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKXtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24oa2luZCl7XG4gICAgaWYoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaChraW5kKXtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHICAgICAgICA9IE5BTUUgKyAnIEl0ZXJhdG9yJ1xuICAgICwgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTXG4gICAgLCBWQUxVRVNfQlVHID0gZmFsc2VcbiAgICAsIHByb3RvICAgICAgPSBCYXNlLnByb3RvdHlwZVxuICAgICwgJG5hdGl2ZSAgICA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXVxuICAgICwgJGRlZmF1bHQgICA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpXG4gICAgLCAkZW50cmllcyAgID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZFxuICAgICwgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmVcbiAgICAsIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYoJGFueU5hdGl2ZSl7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UpKTtcbiAgICBpZihJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSl7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYoIUxJQlJBUlkgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKWhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZihERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpe1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKXtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddICA9IHJldHVyblRoaXM7XG4gIGlmKERFRkFVTFQpe1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6ICBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6ICAgIElTX1NFVCAgICAgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZihGT1JDRUQpZm9yKGtleSBpbiBtZXRob2RzKXtcbiAgICAgIGlmKCEoa2V5IGluIHByb3RvKSlyZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanNcbi8vIG1vZHVsZSBpZCA9IDMxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(10)\n , dPs = __webpack_require__(56)\n , enumBugKeys = __webpack_require__(16)\n , IE_PROTO = __webpack_require__(21)('IE_PROTO')\n , Empty = function(){ /* empty */ }\n , PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(29)('iframe')\n , i = enumBugKeys.length\n , lt = '<'\n , gt = '>'\n , iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(49).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties){\n var result;\n if(O !== null){\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty;\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzP2Q4Y2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCAgICA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpXG4gICwgZFBzICAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJylcbiAgLCBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKVxuICAsIElFX1BST1RPICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpXG4gICwgRW1wdHkgICAgICAgPSBmdW5jdGlvbigpeyAvKiBlbXB0eSAqLyB9XG4gICwgUFJPVE9UWVBFICAgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbigpe1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKVxuICAgICwgaSAgICAgID0gZW51bUJ1Z0tleXMubGVuZ3RoXG4gICAgLCBsdCAgICAgPSAnPCdcbiAgICAsIGd0ICAgICA9ICc+J1xuICAgICwgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUoaS0tKWRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKXtcbiAgdmFyIHJlc3VsdDtcbiAgaWYoTyAhPT0gbnVsbCl7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1jcmVhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDMyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==");
},function(module,exports,__webpack_require__){eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(35)\n , hiddenKeys = __webpack_require__(16).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){\n return $keys(O, hiddenKeys);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi5qcz8xZTA3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJylcbiAgLCBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pe1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanNcbi8vIG1vZHVsZSBpZCA9IDMzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qcz9hNWZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BzLmpzXG4vLyBtb2R1bGUgaWQgPSAzNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("var has = __webpack_require__(2)\n , toIObject = __webpack_require__(3)\n , arrayIndexOf = __webpack_require__(46)(false)\n , IE_PROTO = __webpack_require__(21)('IE_PROTO');\n\nmodule.exports = function(object, names){\n var O = toIObject(object)\n , i = 0\n , result = []\n , key;\n for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while(names.length > i)if(has(O, key = names[i++])){\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcz9mY2VhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXMgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIHRvSU9iamVjdCAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpXG4gICwgSUVfUFJPVE8gICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iamVjdCwgbmFtZXMpe1xuICB2YXIgTyAgICAgID0gdG9JT2JqZWN0KG9iamVjdClcbiAgICAsIGkgICAgICA9IDBcbiAgICAsIHJlc3VsdCA9IFtdXG4gICAgLCBrZXk7XG4gIGZvcihrZXkgaW4gTylpZihrZXkgIT0gSUVfUFJPVE8paGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKWlmKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSl7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzXG4vLyBtb2R1bGUgaWQgPSAzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(5);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS5qcz8xNDU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19oaWRlJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(15);\nmodule.exports = function(it){\n return Object(defined(it));\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanM/YjVjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSAzN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},,function(module,exports,__webpack_require__){eval('module.exports = { "default": __webpack_require__(42), __esModule: true };\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wuanM/YTcwZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IiLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wuanNcbi8vIG1vZHVsZSBpZCA9IDM5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==')},function(module,exports,__webpack_require__){eval('module.exports = { "default": __webpack_require__(43), __esModule: true };\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wvaXRlcmF0b3IuanM/ZDE2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IiLCJmaWxlIjoiNDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wvaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDQwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==')},function(module,exports,__webpack_require__){eval('"use strict";\n\nexports.__esModule = true;\n\nvar _iterator = __webpack_require__(40);\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = __webpack_require__(39);\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {\n return typeof obj === "undefined" ? "undefined" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvaGVscGVycy90eXBlb2YuanM/ZjRiZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxpSEFBaUgsbUJBQW1CLEVBQUUsbUJBQW1CLDRKQUE0Sjs7QUFFclQsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSIsImZpbGUiOiI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2l0ZXJhdG9yID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yXCIpO1xuXG52YXIgX2l0ZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2l0ZXJhdG9yKTtcblxudmFyIF9zeW1ib2wgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9zeW1ib2xcIik7XG5cbnZhciBfc3ltYm9sMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N5bWJvbCk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgX2l0ZXJhdG9yMi5kZWZhdWx0ID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZihfaXRlcmF0b3IyLmRlZmF1bHQpID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59IDogZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfc3ltYm9sMi5kZWZhdWx0ICYmIG9iaiAhPT0gX3N5bWJvbDIuZGVmYXVsdC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzXG4vLyBtb2R1bGUgaWQgPSA0MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=')},function(module,exports,__webpack_require__){eval("__webpack_require__(66);\n__webpack_require__(64);\n__webpack_require__(67);\n__webpack_require__(68);\nmodule.exports = __webpack_require__(11).Symbol;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaW5kZXguanM/ZjA3YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5TeW1ib2w7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDQyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("__webpack_require__(65);\n__webpack_require__(69);\nmodule.exports = __webpack_require__(26).f('iterator');\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3IuanM/MjM4ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL193a3MtZXh0JykuZignaXRlcmF0b3InKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvci5qc1xuLy8gbW9kdWxlIGlkID0gNDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports){eval("module.exports = function(it){\n if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzP2Q1M2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanNcbi8vIG1vZHVsZSBpZCA9IDQ0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("module.exports = function(){ /* empty */ };\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanM/ZDVlOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEIiLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanNcbi8vIG1vZHVsZSBpZCA9IDQ1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(3)\n , toLength = __webpack_require__(62)\n , toIndex = __webpack_require__(61);\nmodule.exports = function(IS_INCLUDES){\n return function($this, el, fromIndex){\n var O = toIObject($this)\n , length = toLength(O.length)\n , index = toIndex(fromIndex, length)\n , value;\n // Array#includes uses SameValueZero equality algorithm\n if(IS_INCLUDES && el != el)while(length > index){\n value = O[index++];\n if(value != value)return true;\n // Array#toIndex ignores holes, Array#includes - not\n } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n if(O[index] === el)return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcz82MTk5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxXQUFXLGVBQWU7QUFDL0I7QUFDQSxLQUFLO0FBQ0w7QUFDQSIsImZpbGUiOiI0Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgdG9MZW5ndGggID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCB0b0luZGV4ICAgPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihJU19JTkNMVURFUyl7XG4gIHJldHVybiBmdW5jdGlvbigkdGhpcywgZWwsIGZyb21JbmRleCl7XG4gICAgdmFyIE8gICAgICA9IHRvSU9iamVjdCgkdGhpcylcbiAgICAgICwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpXG4gICAgICAsIGluZGV4ICA9IHRvSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpXG4gICAgICAsIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICBpZihJU19JTkNMVURFUyAmJiBlbCAhPSBlbCl3aGlsZShsZW5ndGggPiBpbmRleCl7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICBpZih2YWx1ZSAhPSB2YWx1ZSlyZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSN0b0luZGV4IGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvcig7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspaWYoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTyl7XG4gICAgICBpZihPW2luZGV4XSA9PT0gZWwpcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzXG4vLyBtb2R1bGUgaWQgPSA0NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("// optional / simple context binding\nvar aFunction = __webpack_require__(44);\nmodule.exports = function(fn, that, length){\n aFunction(fn);\n if(that === undefined)return fn;\n switch(length){\n case 1: return function(a){\n return fn.call(that, a);\n };\n case 2: return function(a, b){\n return fn.call(that, a, b);\n };\n case 3: return function(a, b, c){\n return fn.call(that, a, b, c);\n };\n }\n return function(/* ...args */){\n return fn.apply(that, arguments);\n };\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanM/Y2UwMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQ3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgdGhhdCwgbGVuZ3RoKXtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYodGhhdCA9PT0gdW5kZWZpbmVkKXJldHVybiBmbjtcbiAgc3dpdGNoKGxlbmd0aCl7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24oYSl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKC8qIC4uLmFyZ3MgKi8pe1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qc1xuLy8gbW9kdWxlIGlkID0gNDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(9)\n , gOPS = __webpack_require__(34)\n , pIE = __webpack_require__(19);\nmodule.exports = function(it){\n var result = getKeys(it)\n , getSymbols = gOPS.f;\n if(getSymbols){\n var symbols = getSymbols(it)\n , isEnum = pIE.f\n , i = 0\n , key;\n while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n } return result;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWtleXMuanM/NzI3YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI0OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BTICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKVxuICAsIHBJRSAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIHJlc3VsdCAgICAgPSBnZXRLZXlzKGl0KVxuICAgICwgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYoZ2V0U3ltYm9scyl7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KVxuICAgICAgLCBpc0VudW0gID0gcElFLmZcbiAgICAgICwgaSAgICAgICA9IDBcbiAgICAgICwga2V5O1xuICAgIHdoaWxlKHN5bWJvbHMubGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSlyZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSA0OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(1).document && document.documentElement;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19odG1sLmpzP2U1YWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2h0bWwuanNcbi8vIG1vZHVsZSBpZCA9IDQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(28);\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzPzVjZjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gNTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(28);\nmodule.exports = Array.isArray || function isArray(arg){\n return cof(arg) == 'Array';\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS5qcz8xODQzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKXtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IDUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("'use strict';\nvar create = __webpack_require__(32)\n , descriptor = __webpack_require__(13)\n , setToStringTag = __webpack_require__(20)\n , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(5)(IteratorPrototype, __webpack_require__(7)('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcz8wMTI3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5RkFBZ0YsYUFBYSxFQUFFOztBQUUvRjtBQUNBLHFEQUFxRCwwQkFBMEI7QUFDL0U7QUFDQSIsImZpbGUiOiI1Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKVxuICAsIGRlc2NyaXB0b3IgICAgID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCl7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwge25leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCl9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jcmVhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDUyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("module.exports = function(done, value){\n return {value: value, done: !!done};\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanM/ZTIwOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFVBQVU7QUFDViIsImZpbGUiOiI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZG9uZSwgdmFsdWUpe1xuICByZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanNcbi8vIG1vZHVsZSBpZCA9IDUzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("var getKeys = __webpack_require__(9)\n , toIObject = __webpack_require__(3);\nmodule.exports = function(object, el){\n var O = toIObject(object)\n , keys = getKeys(O)\n , length = keys.length\n , index = 0\n , key;\n while(length > index)if(O[key = keys[index++]] === el)return key;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19rZXlvZi5qcz8wZDNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdldEtleXMgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iamVjdCwgZWwpe1xuICB2YXIgTyAgICAgID0gdG9JT2JqZWN0KG9iamVjdClcbiAgICAsIGtleXMgICA9IGdldEtleXMoTylcbiAgICAsIGxlbmd0aCA9IGtleXMubGVuZ3RoXG4gICAgLCBpbmRleCAgPSAwXG4gICAgLCBrZXk7XG4gIHdoaWxlKGxlbmd0aCA+IGluZGV4KWlmKE9ba2V5ID0ga2V5c1tpbmRleCsrXV0gPT09IGVsKXJldHVybiBrZXk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fa2V5b2YuanNcbi8vIG1vZHVsZSBpZCA9IDU0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("var META = __webpack_require__(14)('meta')\n , isObject = __webpack_require__(12)\n , has = __webpack_require__(2)\n , setDesc = __webpack_require__(6).f\n , id = 0;\nvar isExtensible = Object.isExtensible || function(){\n return true;\n};\nvar FREEZE = !__webpack_require__(8)(function(){\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function(it){\n setDesc(it, META, {value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n }});\n};\nvar fastKey = function(it, create){\n // return primitive with prefix\n if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if(!has(it, META)){\n // can't set metadata to uncaught frozen object\n if(!isExtensible(it))return 'F';\n // not necessary to add metadata\n if(!create)return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function(it, create){\n if(!has(it, META)){\n // can't set metadata to uncaught frozen object\n if(!isExtensible(it))return true;\n // not necessary to add metadata\n if(!create)return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function(it){\n if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19tZXRhLmpzPzU1M2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pELENBQUM7QUFDRDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLFNBQVM7QUFDVCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIE1FVEEgICAgID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKVxuICAsIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0JylcbiAgLCBoYXMgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgc2V0RGVzYyAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mXG4gICwgaWQgICAgICAgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24oaXQpe1xuICBzZXREZXNjKGl0LCBNRVRBLCB7dmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9fSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbihpdCwgY3JlYXRlKXtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZighaXNPYmplY3QoaXQpKXJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmKCFoYXMoaXQsIE1FVEEpKXtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmKCFpc0V4dGVuc2libGUoaXQpKXJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZighY3JlYXRlKXJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24oaXQsIGNyZWF0ZSl7XG4gIGlmKCFoYXMoaXQsIE1FVEEpKXtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmKCFpc0V4dGVuc2libGUoaXQpKXJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYoIWNyZWF0ZSlyZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKXNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiAgICAgIE1FVEEsXG4gIE5FRUQ6ICAgICBmYWxzZSxcbiAgZmFzdEtleTogIGZhc3RLZXksXG4gIGdldFdlYWs6ICBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19tZXRhLmpzXG4vLyBtb2R1bGUgaWQgPSA1NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(6)\n , anObject = __webpack_require__(10)\n , getKeys = __webpack_require__(9);\n\nmodule.exports = __webpack_require__(4) ? Object.defineProperties : function defineProperties(O, Properties){\n anObject(O);\n var keys = getKeys(Properties)\n , length = keys.length\n , i = 0\n , P;\n while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzPzQ3ZmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpXG4gICwgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIGdldEtleXMgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpe1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgICA9IGdldEtleXMoUHJvcGVydGllcylcbiAgICAsIGxlbmd0aCA9IGtleXMubGVuZ3RoXG4gICAgLCBpID0gMFxuICAgICwgUDtcbiAgd2hpbGUobGVuZ3RoID4gaSlkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzXG4vLyBtb2R1bGUgaWQgPSA1NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=");
},function(module,exports,__webpack_require__){eval("var pIE = __webpack_require__(19)\n , createDesc = __webpack_require__(13)\n , toIObject = __webpack_require__(3)\n , toPrimitive = __webpack_require__(24)\n , has = __webpack_require__(2)\n , IE8_DOM_DEFINE = __webpack_require__(30)\n , gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(4) ? gOPD : function getOwnPropertyDescriptor(O, P){\n O = toIObject(O);\n P = toPrimitive(P, true);\n if(IE8_DOM_DEFINE)try {\n return gOPD(O, P);\n } catch(e){ /* empty */ }\n if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wZC5qcz9kN2Q4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFVBQVU7QUFDYjtBQUNBIiwiZmlsZSI6IjU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHBJRSAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpXG4gICwgY3JlYXRlRGVzYyAgICAgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJylcbiAgLCB0b0lPYmplY3QgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpXG4gICwgZ09QRCAgICAgICAgICAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKXtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZihJRThfRE9NX0RFRklORSl0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG4gIGlmKGhhcyhPLCBQKSlyZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanNcbi8vIG1vZHVsZSBpZCA9IDU3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(3)\n , gOPN = __webpack_require__(33).f\n , toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n try {\n return gOPN(it);\n } catch(e){\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it){\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanM/ZDIzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgZ09QTiAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mXG4gICwgdG9TdHJpbmcgID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbihpdCl7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanNcbi8vIG1vZHVsZSBpZCA9IDU4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(2)\n , toObject = __webpack_require__(37)\n , IE_PROTO = __webpack_require__(21)('IE_PROTO')\n , ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function(O){\n O = toObject(O);\n if(has(O, IE_PROTO))return O[IE_PROTO];\n if(typeof O.constructor == 'function' && O instanceof O.constructor){\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ3BvLmpzP2Q0N2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjU5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgICAgICAgICA9IHJlcXVpcmUoJy4vX2hhcycpXG4gICwgdG9PYmplY3QgICAgPSByZXF1aXJlKCcuL190by1vYmplY3QnKVxuICAsIElFX1BST1RPICAgID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpXG4gICwgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbihPKXtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZihoYXMoTywgSUVfUFJPVE8pKXJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcil7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1ncG8uanNcbi8vIG1vZHVsZSBpZCA9IDU5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(23)\n , defined = __webpack_require__(15);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n return function(that, pos){\n var s = String(defined(that))\n , i = toInteger(pos)\n , l = s.length\n , a, b;\n if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpbmctYXQuanM/NDEzYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIGRlZmluZWQgICA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFRPX1NUUklORyl7XG4gIHJldHVybiBmdW5jdGlvbih0aGF0LCBwb3Mpe1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpXG4gICAgICAsIGkgPSB0b0ludGVnZXIocG9zKVxuICAgICAgLCBsID0gcy5sZW5ndGhcbiAgICAgICwgYSwgYjtcbiAgICBpZihpIDwgMCB8fCBpID49IGwpcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpbmctYXQuanNcbi8vIG1vZHVsZSBpZCA9IDYwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(23)\n , max = Math.max\n , min = Math.min;\nmodule.exports = function(index, length){\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbmRleC5qcz85ZmQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjYxLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIG1heCAgICAgICA9IE1hdGgubWF4XG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGluZGV4LCBsZW5ndGgpe1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWluZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA2MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(23)\n , min = Math.min;\nmodule.exports = function(it){\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanM/NjJhNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRCIsImZpbGUiOiI2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIG1pbiAgICAgICA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzXG4vLyBtb2R1bGUgaWQgPSA2MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\nvar addToUnscopables = __webpack_require__(45)\n , step = __webpack_require__(53)\n , Iterators = __webpack_require__(17)\n , toIObject = __webpack_require__(3);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(31)(Array, 'Array', function(iterated, kind){\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , kind = this._k\n , index = this._i++;\n if(!O || index >= O.length){\n this._t = undefined;\n return step(1);\n }\n if(kind == 'keys' )return step(0, index);\n if(kind == 'values')return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcz8xZTA5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyxjQUFjO0FBQ2QsaUJBQWlCO0FBQ2pCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiI2My5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJylcbiAgLCBzdGVwICAgICAgICAgICAgID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJylcbiAgLCBJdGVyYXRvcnMgICAgICAgID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJylcbiAgLCB0b0lPYmplY3QgICAgICAgID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uKGl0ZXJhdGVkLCBraW5kKXtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbigpe1xuICB2YXIgTyAgICAgPSB0aGlzLl90XG4gICAgLCBraW5kICA9IHRoaXMuX2tcbiAgICAsIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZighTyB8fCBpbmRleCA+PSBPLmxlbmd0aCl7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZihraW5kID09ICdrZXlzJyAgKXJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYoa2luZCA9PSAndmFsdWVzJylyZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qc1xuLy8gbW9kdWxlIGlkID0gNjNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports){eval("\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiI2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("'use strict';\nvar $at = __webpack_require__(60)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(31)(String, 'String', function(iterated){\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , index = this._i\n , point;\n if(index >= O.length)return {value: undefined, done: true};\n point = $at(O, index);\n this._i += point.length;\n return {value: point, done: false};\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanM/ZmUxOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IsY0FBYztBQUNkO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsVUFBVTtBQUNWLENBQUMiLCJmaWxlIjoiNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGF0ICA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uKGl0ZXJhdGVkKXtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24oKXtcbiAgdmFyIE8gICAgID0gdGhpcy5fdFxuICAgICwgaW5kZXggPSB0aGlzLl9pXG4gICAgLCBwb2ludDtcbiAgaWYoaW5kZXggPj0gTy5sZW5ndGgpcmV0dXJuIHt2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHt2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlfTtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSA2NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(1)\n , has = __webpack_require__(2)\n , DESCRIPTORS = __webpack_require__(4)\n , $export = __webpack_require__(27)\n , redefine = __webpack_require__(36)\n , META = __webpack_require__(55).KEY\n , $fails = __webpack_require__(8)\n , shared = __webpack_require__(22)\n , setToStringTag = __webpack_require__(20)\n , uid = __webpack_require__(14)\n , wks = __webpack_require__(7)\n , wksExt = __webpack_require__(26)\n , wksDefine = __webpack_require__(25)\n , keyOf = __webpack_require__(54)\n , enumKeys = __webpack_require__(48)\n , isArray = __webpack_require__(51)\n , anObject = __webpack_require__(10)\n , toIObject = __webpack_require__(3)\n , toPrimitive = __webpack_require__(24)\n , createDesc = __webpack_require__(13)\n , _create = __webpack_require__(32)\n , gOPNExt = __webpack_require__(58)\n , $GOPD = __webpack_require__(57)\n , $DP = __webpack_require__(6)\n , $keys = __webpack_require__(9)\n , gOPD = $GOPD.f\n , dP = $DP.f\n , gOPN = gOPNExt.f\n , $Symbol = global.Symbol\n , $JSON = global.JSON\n , _stringify = $JSON && $JSON.stringify\n , PROTOTYPE = 'prototype'\n , HIDDEN = wks('_hidden')\n , TO_PRIMITIVE = wks('toPrimitive')\n , isEnum = {}.propertyIsEnumerable\n , SymbolRegistry = shared('symbol-registry')\n , AllSymbols = shared('symbols')\n , OPSymbols = shared('op-symbols')\n , ObjectProto = Object[PROTOTYPE]\n , USE_NATIVE = typeof $Symbol == 'function'\n , QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n return _create(dP({}, 'a', {\n get: function(){ return dP(this, 'a', {value: 7}).a; }\n })).a != 7;\n}) ? function(it, key, D){\n var protoDesc = gOPD(ObjectProto, key);\n if(protoDesc)delete ObjectProto[key];\n dP(it, key, D);\n if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function(tag){\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n return typeof it == 'symbol';\n} : function(it){\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if(has(AllSymbols, key)){\n if(!D.enumerable){\n if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n D = _create(D, {enumerable: createDesc(0, false)});\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n anObject(it);\n var keys = enumKeys(P = toIObject(P))\n , i = 0\n , l = keys.length\n , key;\n while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P){\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n it = toIObject(it);\n key = toPrimitive(key, true);\n if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n var D = gOPD(it, key);\n if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n var names = gOPN(toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i){\n if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n var IS_OP = it === ObjectProto\n , names = gOPN(IS_OP ? OPSymbols : toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i){\n if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){\n $Symbol = function Symbol(){\n if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function(value){\n if(this === ObjectProto)$set.call(OPSymbols, value);\n if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(33).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(19).f = $propertyIsEnumerable;\n __webpack_require__(34).f = $getOwnPropertySymbols;\n\n if(DESCRIPTORS && !__webpack_require__(18)){\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function(name){\n return wrap(wks(name));\n }\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\nfor(var symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function(key){\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(key){\n if(isSymbol(key))return keyOf(SymbolRegistry, key);\n throw TypeError(key + ' is not a symbol!');\n },\n useSetter: function(){ setter = true; },\n useSimple: function(){ setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it){\n if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n var args = [it]\n , i = 1\n , replacer, $replacer;\n while(arguments.length > i)args.push(arguments[i++]);\n replacer = args[1];\n if(typeof replacer == 'function')$replacer = replacer;\n if($replacer || !isArray(replacer))replacer = function(key, value){\n if($replacer)value = $replacer.call(this, key, value);\n if(!isSymbol(value))return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(5)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanM/NjcwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCLG9CQUFvQix1QkFBdUIsU0FBUyxJQUFJO0FBQ3hELEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0EsS0FBSztBQUNMO0FBQ0Esc0JBQXNCLGlDQUFpQztBQUN2RCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsOEJBQThCO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwREFBMEQsZ0JBQWdCOztBQUUxRTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9COztBQUV4QywwQ0FBMEMsb0JBQW9COztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsd0JBQXdCLGVBQWUsRUFBRTtBQUN6Qyx3QkFBd0IsZ0JBQWdCO0FBQ3hDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxLQUFLLFFBQVEsaUNBQWlDO0FBQ2xHLENBQUM7QUFDRDtBQUNBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuL19oYXMnKVxuICAsIERFU0NSSVBUT1JTICAgID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKVxuICAsICRleHBvcnQgICAgICAgID0gcmVxdWlyZSgnLi9fZXhwb3J0JylcbiAgLCByZWRlZmluZSAgICAgICA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJylcbiAgLCBNRVRBICAgICAgICAgICA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVlcbiAgLCAkZmFpbHMgICAgICAgICA9IHJlcXVpcmUoJy4vX2ZhaWxzJylcbiAgLCBzaGFyZWQgICAgICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpXG4gICwgdWlkICAgICAgICAgICAgPSByZXF1aXJlKCcuL191aWQnKVxuICAsIHdrcyAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fd2tzJylcbiAgLCB3a3NFeHQgICAgICAgICA9IHJlcXVpcmUoJy4vX3drcy1leHQnKVxuICAsIHdrc0RlZmluZSAgICAgID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpXG4gICwga2V5T2YgICAgICAgICAgPSByZXF1aXJlKCcuL19rZXlvZicpXG4gICwgZW51bUtleXMgICAgICAgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKVxuICAsIGlzQXJyYXkgICAgICAgID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKVxuICAsIGFuT2JqZWN0ICAgICAgID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0JylcbiAgLCB0b0lPYmplY3QgICAgICA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBjcmVhdGVEZXNjICAgICA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKVxuICAsIF9jcmVhdGUgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpXG4gICwgZ09QTkV4dCAgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKVxuICAsICRHT1BEICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKVxuICAsICREUCAgICAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCAka2V5cyAgICAgICAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJylcbiAgLCBnT1BEICAgICAgICAgICA9ICRHT1BELmZcbiAgLCBkUCAgICAgICAgICAgICA9ICREUC5mXG4gICwgZ09QTiAgICAgICAgICAgPSBnT1BORXh0LmZcbiAgLCAkU3ltYm9sICAgICAgICA9IGdsb2JhbC5TeW1ib2xcbiAgLCAkSlNPTiAgICAgICAgICA9IGdsb2JhbC5KU09OXG4gICwgX3N0cmluZ2lmeSAgICAgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnlcbiAgLCBQUk9UT1RZUEUgICAgICA9ICdwcm90b3R5cGUnXG4gICwgSElEREVOICAgICAgICAgPSB3a3MoJ19oaWRkZW4nKVxuICAsIFRPX1BSSU1JVElWRSAgID0gd2tzKCd0b1ByaW1pdGl2ZScpXG4gICwgaXNFbnVtICAgICAgICAgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZVxuICAsIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKVxuICAsIEFsbFN5bWJvbHMgICAgID0gc2hhcmVkKCdzeW1ib2xzJylcbiAgLCBPUFN5bWJvbHMgICAgICA9IHNoYXJlZCgnb3Atc3ltYm9scycpXG4gICwgT2JqZWN0UHJvdG8gICAgPSBPYmplY3RbUFJPVE9UWVBFXVxuICAsIFVTRV9OQVRJVkUgICAgID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJ1xuICAsIFFPYmplY3QgICAgICAgID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiBkUCh0aGlzLCAnYScsIHt2YWx1ZTogN30pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24oaXQsIGtleSwgRCl7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZihwcm90b0Rlc2MpZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZihwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKWRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24odGFnKXtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCl7XG4gIGlmKGl0ID09PSBPYmplY3RQcm90bykkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZihoYXMoQWxsU3ltYm9scywga2V5KSl7XG4gICAgaWYoIUQuZW51bWVyYWJsZSl7XG4gICAgICBpZighaGFzKGl0LCBISURERU4pKWRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0paXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7ZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSl9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKXtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpXG4gICAgLCBpICAgID0gMFxuICAgICwgbCA9IGtleXMubGVuZ3RoXG4gICAgLCBrZXk7XG4gIHdoaWxlKGwgPiBpKSRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApe1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSl7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKXJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpe1xuICBpdCAgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZihpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSlELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KXtcbiAgdmFyIG5hbWVzICA9IGdPUE4odG9JT2JqZWN0KGl0KSlcbiAgICAsIHJlc3VsdCA9IFtdXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCBrZXk7XG4gIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpe1xuICAgIGlmKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSlyZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpe1xuICB2YXIgSVNfT1AgID0gaXQgPT09IE9iamVjdFByb3RvXG4gICAgLCBuYW1lcyAgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSlcbiAgICAsIHJlc3VsdCA9IFtdXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCBrZXk7XG4gIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpe1xuICAgIGlmKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSlyZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmKCFVU0VfTkFUSVZFKXtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpe1xuICAgIGlmKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKXRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24odmFsdWUpe1xuICAgICAgaWYodGhpcyA9PT0gT2JqZWN0UHJvdG8pJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSl0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmKERFU0NSSVBUT1JTICYmIHNldHRlcilzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHtjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKXtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mICAgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiAgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJykuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSl7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uKG5hbWUpe1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH1cbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwge1N5bWJvbDogJFN5bWJvbH0pO1xuXG5mb3IodmFyIHN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaSA9IDA7IHN5bWJvbHMubGVuZ3RoID4gaTsgKXdrcyhzeW1ib2xzW2krK10pO1xuXG5mb3IodmFyIHN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBpID0gMDsgc3ltYm9scy5sZW5ndGggPiBpOyApd2tzRGVmaW5lKHN5bWJvbHNbaSsrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24oa2V5KXtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKGtleSl7XG4gICAgaWYoaXNTeW1ib2woa2V5KSlyZXR1cm4ga2V5T2YoU3ltYm9sUmVnaXN0cnksIGtleSk7XG4gICAgdGhyb3cgVHlwZUVycm9yKGtleSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uKCl7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24oKXsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24oKXtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoe2E6IFN9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpe1xuICAgIGlmKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKXJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIHZhciBhcmdzID0gW2l0XVxuICAgICAgLCBpICAgID0gMVxuICAgICAgLCByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlKGFyZ3VtZW50cy5sZW5ndGggPiBpKWFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmKHR5cGVvZiByZXBsYWNlciA9PSAnZnVuY3Rpb24nKSRyZXBsYWNlciA9IHJlcGxhY2VyO1xuICAgIGlmKCRyZXBsYWNlciB8fCAhaXNBcnJheShyZXBsYWNlcikpcmVwbGFjZXIgPSBmdW5jdGlvbihrZXksIHZhbHVlKXtcbiAgICAgIGlmKCRyZXBsYWNlcil2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYoIWlzU3ltYm9sKHZhbHVlKSlyZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3ltYm9sLmpzXG4vLyBtb2R1bGUgaWQgPSA2NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=");
},function(module,exports,__webpack_require__){eval("__webpack_require__(25)('asyncIterator');\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanM/YjhjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSA2N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("__webpack_require__(25)('observable');\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZS5qcz9kYWE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjY4LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZS5qc1xuLy8gbW9kdWxlIGlkID0gNjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("__webpack_require__(63);\nvar global = __webpack_require__(1)\n , hide = __webpack_require__(5)\n , Iterators = __webpack_require__(17)\n , TO_STRING_TAG = __webpack_require__(7)('toStringTag');\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n var NAME = collections[i]\n , Collection = global[NAME]\n , proto = Collection && Collection.prototype;\n if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanM/YmYwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdHQUF3RyxPQUFPO0FBQy9HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2xvYmFsICAgICAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgaGlkZSAgICAgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIEl0ZXJhdG9ycyAgICAgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKVxuICAsIFRPX1NUUklOR19UQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxuZm9yKHZhciBjb2xsZWN0aW9ucyA9IFsnTm9kZUxpc3QnLCAnRE9NVG9rZW5MaXN0JywgJ01lZGlhTGlzdCcsICdTdHlsZVNoZWV0TGlzdCcsICdDU1NSdWxlTGlzdCddLCBpID0gMDsgaSA8IDU7IGkrKyl7XG4gIHZhciBOQU1FICAgICAgID0gY29sbGVjdGlvbnNbaV1cbiAgICAsIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV1cbiAgICAsIHByb3RvICAgICAgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZihwcm90byAmJiAhcHJvdG9bVE9fU1RSSU5HX1RBR10paGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qc1xuLy8gbW9kdWxlIGlkID0gNjlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiXSwic291cmNlUm9vdCI6IiJ9")},,,function(module,exports,__webpack_require__){eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module) {'use strict';\n\nvar _keys = __webpack_require__(80);\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nvar _typeof2 = __webpack_require__(41);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*!\n * Q.js v1.0.12\n * Inspired from vue.js\n * (c) 2016 Daniel Yang\n * Released under the MIT License.\n */\n\n/**\n * Just support modern browser\n */\n\n(function webpackUniversalModuleDefinition(root, factory) {\n if (( false ? 'undefined' : (0, _typeof3.default)(exports)) === 'object' && ( false ? 'undefined' : (0, _typeof3.default)(module)) === 'object') module.exports = factory();else if (true) !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else if ((typeof exports === 'undefined' ? 'undefined' : (0, _typeof3.default)(exports)) === 'object') exports[\"Q\"] = factory();else root[\"Q\"] = factory();\n})(undefined, function () {\n return (/******/function (modules) {\n // webpackBootstrap\n /******/ // The module cache\n /******/var installedModules = {};\n\n /******/ // The require function\n /******/function __webpack_require__(moduleId) {\n\n /******/ // Check if module is in cache\n /******/if (installedModules[moduleId])\n /******/return installedModules[moduleId].exports;\n\n /******/ // Create a new module (and put it into the cache)\n /******/var module = installedModules[moduleId] = {\n /******/exports: {},\n /******/id: moduleId,\n /******/loaded: false\n /******/ };\n\n /******/ // Execute the module function\n /******/modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n /******/ // Flag the module as loaded\n /******/module.loaded = true;\n\n /******/ // Return the exports of the module\n /******/return module.exports;\n /******/\n }\n\n /******/ // expose the modules object (__webpack_modules__)\n /******/__webpack_require__.m = modules;\n\n /******/ // expose the module cache\n /******/__webpack_require__.c = installedModules;\n\n /******/ // __webpack_public_path__\n /******/__webpack_require__.p = \"\";\n\n /******/ // Load entry module and return exports\n /******/return __webpack_require__(0);\n /******/\n }(\n /************************************************************************/\n /******/[\n /* 0 */\n /***/function (module, exports, __webpack_require__) {\n\n var utils = __webpack_require__(1),\n _ = __webpack_require__(3),\n factory = __webpack_require__(4);\n\n _.extend(utils, _);\n module.exports = factory(utils);\n\n /***/\n },\n /* 1 */\n /***/function (module, exports, __webpack_require__) {\n\n var noop = function noop() {},\n defer = window.requestAnimationFrame || window.webkitRequestAnimationFrame || setTimeout,\n cache = new (__webpack_require__(2))(1000),\n\n // priority directives\n priorities = ['vm', 'repeat', 'if'],\n _qtid = 0,\n _slice = [].slice,\n _alpaca = document.getElementsByTagName('html')[0],\n slice = function () {\n try {\n _slice.call(document.body.childNodes);\n return _slice;\n } catch (e) {\n return function (i) {\n i = i || 0;\n var res = [],\n l = this.length;\n for (; i < l; i++) {\n res.push(this[i]);\n }\n return res;\n };\n }\n }();\n\n _alpaca && (_alpaca = _alpaca.getAttribute('alpaca'));\n\n function _loopPriority(el, res, setting) {\n var attr, tmp;\n\n // TODO need optimization\n for (var j = 0, l = priorities.length; j < l; j++) {\n attr = 'q-' + priorities[j];\n if (tmp = el.getAttribute(attr)) {\n res.push({\n name: attr,\n value: tmp\n });\n\n el.removeAttribute(attr);\n // has priority directive\n return true;\n }\n }\n }\n\n function walk($el, cb, setting) {\n setting = setting || {};\n var i, j, l, el, atts, res, qtid;\n for (i = 0; el = $el[i++];) {\n if (el.nodeType === 1) {\n atts = el.attributes;\n res = [];\n\n // loop the priority directive\n if (!_loopPriority(el, res, setting)) {\n // loop other directive\n for (j = 0, l = atts.length; j < l; j++) {\n atts[j].name.indexOf('q-') === 0 && res.push({\n name: atts[j].name,\n value: atts[j].value\n });\n }\n }\n res.length > 0 && cb(el, res, setting);\n }\n if (el.childNodes.length && !setting.stop) walk(slice.call(el.childNodes, 0), cb, setting);\n // reset stop\n setting.stop = false;\n }\n }\n\n module.exports = {\n slice: slice,\n noop: noop,\n /**\n * Add class with compatibility for IE & SVG\n *\n * @param {Element} el\n * @param {Strong} cls\n */\n addClass: function addClass(el, cls) {\n if (el.classList) {\n el.classList.add(cls);\n } else {\n var cur = ' ' + (el.className || '') + ' ';\n if (cur.indexOf(' ' + cls + ' ') < 0) {\n el.className = (cur + cls).trim();\n }\n }\n },\n /**\n * Remove class with compatibility for IE & SVG\n *\n * @param {Element} el\n * @param {Strong} cls\n */\n removeClass: function removeClass(el, cls) {\n if (el.classList) {\n el.classList.remove(cls);\n } else {\n var cur = ' ' + (el.className || '') + ' ',\n tar = ' ' + cls + ' ';\n while (cur.indexOf(tar) >= 0) {\n cur = cur.replace(tar, ' ');\n }\n el.className = cur.trim();\n }\n },\n noexist: function noexist(vm, name) {\n this.warn(vm);\n throw new Error('Filter ' + name + ' hasn\\'t implemented.');\n },\n warn: function () {\n return window.console && console.error ? function () {\n console.error.apply(console, arguments);\n } : noop;\n }(),\n isObject: function isObject(o) {\n return (typeof o === 'undefined' ? 'undefined' : (0, _typeof3.default)(o)) === 'object';\n },\n nextTick: function nextTick(cb, ctx) {\n return ctx ? defer(function () {\n cb.call(ctx);\n }, 0) : defer(cb, 0);\n },\n /**\n * get\n * @param {String} namespace\n * @param {String} key\n * @returns {String}\n */\n get: function get(namespace, key) {\n var arr = [];\n namespace && arr.push(namespace);\n key && arr.push(key);\n return arr.join('.').replace(/^(.+\\.)?\\$top\\./, '');\n },\n walk: walk,\n /**\n * alpaca\n * just a flag\n */\n alpaca: !!_alpaca\n };\n\n /***/\n },\n /* 2 */\n /***/function (module, exports) {\n\n /**\n * just a copy of: https://github.com/yyx990803/vue/blob/master/src/cache.js\n *\n * @param {Number} limit\n * @constructor\n */\n\n function Cache(limit) {\n this.size = 0;\n this.limit = limit;\n this.head = this.tail = undefined;\n this._keymap = {};\n }\n\n var p = Cache.prototype;\n\n /**\n * Put <value> into the cache associated with <key>.\n * Returns the entry which was removed to make room for\n * the new entry. Otherwise undefined is returned.\n * (i.e. if there was enough room already).\n *\n * @param {String} key\n * @param {*} value\n * @return {Entry|undefined}\n */\n\n p.put = function (key, value) {\n var entry = {\n key: key,\n value: value\n };\n this._keymap[key] = entry;\n if (this.tail) {\n this.tail.newer = entry;\n entry.older = this.tail;\n } else {\n this.head = entry;\n }\n this.tail = entry;\n if (this.size === this.limit) {\n return this.shift();\n } else {\n this.size++;\n }\n };\n\n /**\n * Purge the least recently used (oldest) entry from the\n * cache. Returns the removed entry or undefined if the\n * cache was empty.\n */\n\n p.shift = function () {\n var entry = this.head;\n if (entry) {\n this.head = this.head.newer;\n this.head.older = undefined;\n entry.newer = entry.older = undefined;\n this._keymap[entry.key] = undefined;\n }\n return entry;\n };\n\n /**\n * Get and register recent use of <key>. Returns the value\n * associated with <key> or undefined if not in cache.\n *\n * @param {String} key\n * @param {Boolean} returnEntry\n * @return {Entry|*}\n */\n\n p.get = function (key, returnEntry) {\n var entry = this._keymap[key];\n if (entry === undefined) return;\n if (entry === this.tail) {\n return returnEntry ? entry : entry.value;\n }\n // HEAD--------------TAIL\n // <.older .newer>\n // <--- add direction --\n // A B C <D> E\n if (entry.newer) {\n if (entry === this.head) {\n this.head = entry.newer;\n }\n entry.newer.older = entry.older; // C <-- E.\n }\n if (entry.older) {\n entry.older.newer = entry.newer; // C. --> E\n }\n entry.newer = undefined; // D --x\n entry.older = this.tail; // D. --> E\n if (this.tail) {\n this.tail.newer = entry; // E. <-- D\n }\n this.tail = entry;\n return returnEntry ? entry : entry.value;\n };\n\n module.exports = Cache;\n\n /***/\n },\n /* 3 */\n /***/function (module, exports) {\n\n var DELEGATOR_CALLBACKS_KEY = '__cbs__',\n NO_DELEGATOR = {\n // prevent mouseover trigger more than one time\n mouseover: true,\n change: true,\n input: true,\n porpertychange: true\n };\n var _extend = function _extend(target, srcs) {\n srcs = [].splice.call(arguments, 1);\n var i = 0,\n l = srcs.length,\n src,\n key;\n for (; i < l; i++) {\n src = srcs[i];\n for (key in src) {\n target[key] = src[key];\n }\n }\n return target;\n },\n _expando = 'QDataUid',\n _uid = 0,\n _map = {};\n\n function contains(a, b) {\n return a !== b && a.contains(b);\n }\n\n function data(el, key, value) {\n var uid = el[_expando] = el[_expando] || ++_uid,\n data = _map[uid] = _map[uid] || {};\n // set Data\n if (value === undefined) return data[key];\n return data[key] = value;\n }\n\n function _add(el, evt, fn) {\n evt.split(' ').forEach(function (e) {\n el.addEventListener(e, fn, false);\n });\n }\n\n module.exports = {\n find: function find(selector) {\n return this.slice.call(document.querySelectorAll(selector), 0);\n },\n contains: contains,\n data: data,\n cleanData: function cleanData(els) {\n var uid;\n els.forEach(function (el) {\n var uid = el[_expando];\n // has data\n uid && uid in _map && delete _map[uid];\n });\n },\n add: function add(el, evt, fn, vm) {\n if (!vm || NO_DELEGATOR[evt]) {\n _add(el, evt, fn);\n } else {\n var $el = vm.$el,\n cbs = data($el, DELEGATOR_CALLBACKS_KEY);\n if (!cbs) {\n cbs = [];\n data($el, DELEGATOR_CALLBACKS_KEY, cbs);\n _add($el, evt, function (e) {\n var target = e.target;\n cbs.forEach(function (cb) {\n var fn = cb.fn,\n el = cb.el;\n if (contains(el, target)) {\n fn.call(el, e);\n }\n });\n });\n }\n // push\n cbs.push({\n el: el,\n fn: fn\n });\n }\n },\n remove: function remove(el, evt, fn) {\n el.removeEventListener(evt, fn, false);\n },\n clone: function clone(ele) {\n return ele.cloneNode(true);\n },\n extend: function extend(target) {\n if (arguments.length === 1) return _extend(this, target);\n return _extend.apply(this, arguments);\n }\n };\n\n /***/\n },\n /* 4 */\n /***/function (module, exports, __webpack_require__) {\n\n module.exports = function (_) {\n\n var Seed = __webpack_require__(5),\n events = __webpack_require__(6),\n MARK = /\\{\\{(.+?)\\}\\}/,\n mergeOptions = __webpack_require__(7).mergeOptions,\n clas = __webpack_require__(8),\n _doc = document;\n\n function _inDoc(ele) {\n return _.contains(_doc.documentElement, ele);\n }\n\n // lifecycle: created -> compiled\n\n /**\n * Q\n * @class\n * @param {Object} options\n */\n function Q(options) {\n this._init(options);\n }\n // exports utils\n Q._ = _;\n Q.options = {\n directives: __webpack_require__(9),\n filters: {}\n };\n /**\n * get\n * @param {String | Element} selector\n * @return {Q}\n */\n Q.get = function (selector) {\n var ele = _.find(selector)[0];\n if (ele) {\n return _.data(ele, 'QI');\n } else {\n return new this({ el: selector });\n }\n };\n /**\n * all\n * @param {Object} options\n */\n Q.all = function (options) {\n var self = this;\n return _.find(options.el).map(function (ele) {\n return new self(_.extend(options, { el: ele }));\n });\n };\n _.extend(Q, clas);\n _.extend(Q.prototype, {\n _init: function _init(options) {\n options = options || {};\n this.$el = options.el && typeof options.el === 'string' ? _.find(options.el)[0] : options.el;\n // element references\n this.$$ = {};\n // set parent vm\n this.$parent = options._parent;\n // merge options\n options = this.$options = mergeOptions(this.constructor.options, options, this);\n // lifecycle state\n this._isCompiled = false;\n this._isAttached = false;\n this._isReady = false;\n // events bookkeeping\n this._events = {};\n this._watchers = {};\n\n // components\n this._children = [];\n // components references\n this.$ = {};\n\n Seed.call(this, options);\n // this._data = options.data;\n // initialize data and scope inheritance.\n this._initScope();\n // call created hook\n this._callHook('created');\n // start compilation\n if (this.$el) {\n // cache the instance\n _.data(this.$el, 'QI', this);\n this.$mount(this.$el);\n }\n },\n /**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n */\n $on: function $on(event, fn) {\n (this._events[event] || (this._events[event] = [])).push(fn);\n return this;\n },\n /**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n */\n $once: function $once(event, fn) {\n var self = this;\n function on() {\n self.$off(event, on);\n fn.apply(this, arguments);\n }\n on.fn = fn;\n this.$on(event, on);\n return this;\n },\n\n /**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n */\n\n $off: function $off(event, fn) {\n var cbs, cb, i;\n // all event\n if (!arguments.length) {\n this._events = {};\n return this;\n }\n // specific event\n cbs = this._events[event];\n if (!cbs) {\n return this;\n }\n if (arguments.length === 1) {\n this._events[event] = null;\n return this;\n }\n // specific handler\n i = cbs.length;\n while (i--) {\n cb = cbs[i];\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i, 1);\n break;\n }\n }\n return this;\n },\n /**\n * Watch an expression, trigger callback when its\n * value changes.\n *\n * @param {String} exp\n * @param {Function} cb\n * @param {Boolean} [deep]\n * @param {Boolean} [immediate]\n * @return {Function} - unwatchFn\n */\n $watch: function $watch(exp, cb, deep, immediate) {\n var key = deep ? exp + '**deep**' : exp;\n (this._watchers[key] || (this._watchers[key] = [])).push(cb);\n immediate && cb(this.data(exp));\n return this;\n },\n /**\n * Trigger an event on self.\n *\n * @param {String} e\n */\n $emit: function $emit(e) {\n var args = _.slice.call(arguments, 1);\n events.emit.call(this, e, _.slice.call(args, 0));\n // emit data change\n if (!e.indexOf('data:')) {\n e = e.substring(5);\n events.callChange.call(this, e, _.slice.call(args, 0));\n }\n if (!e.indexOf('deep:')) {\n e = e.substring(5);\n events.callDeep.call(this, e, _.slice.call(args, 0));\n args.unshift(e);\n events.emit.call(this, 'datachange', args);\n }\n return this;\n },\n /**\n * Setup the scope of an instance, which contains:\n * - observed data\n * - computed properties\n * - user methods\n * - meta properties\n */\n _initScope: function _initScope() {\n this._initMethods();\n },\n\n /**\n * Setup instance methods. Methods must be bound to the\n * instance since they might be called by children\n * inheriting them.\n */\n _initMethods: function _initMethods() {\n var methods = this.$options.methods,\n key;\n if (methods) {\n for (key in methods) {\n this[key] = methods[key].bind(this);\n }\n }\n },\n\n /**\n * Set instance target element and kick off the compilation\n * process. The passed in `el` can be a template string, an\n * existing Element, or a DocumentFragment (for block\n * instances).\n *\n * @param {String|Element|DocumentFragment} el\n * @public\n */\n $mount: function $mount(el) {\n if (this._isCompiled) {\n return _.warn('$mount() should be called only once');\n }\n // TODO for template || we may not do for template\n // if (typeof el === 'string') {\n //\n // }\n this._compile(el);\n this._isCompiled = true;\n this._callHook('compiled');\n if (_inDoc(this.$el)) {\n this._callHook('attached');\n this._ready();\n } else {\n this.$once('hook:attached', this._ready);\n }\n },\n\n /**\n * ready\n */\n _ready: function _ready() {\n this._isAttached = true;\n this._isReady = true;\n this._callHook('ready');\n },\n /**\n * Transclude, compile and link element.\n *\n * If a pre-compiled linker is available, that means the\n * passed in element will be pre-transcluded and compiled\n * as well - all we need to do is to call the linker.\n *\n * Otherwise we need to call transclude/compile/link here.\n *\n * @param {Element} el\n * @return {Element}\n */\n _compile: function _compile(el) {\n this.transclue(el, this.$options);\n },\n /**\n * Process an element or a DocumentFragment based on a\n * instance option object. This allows us to transclude\n * a template node/fragment before the instance is created,\n * so the processed fragment can then be cloned and reused\n * in v-repeat.\n *\n * @param {Element} el\n * @param {Object} options\n */\n transclue: function transclue(el, options) {\n // just bind template\n this._templateBind(el, options);\n },\n\n /**\n * bind rendered template\n */\n _templateBind: __webpack_require__(11),\n\n /**\n * Trigger all handlers for a hook\n *\n * @param {String} hook\n */\n _callHook: function _callHook(hook) {\n var handlers = this.$options[hook];\n if (handlers) {\n for (var i = 0, j = handlers.length; i < j; i++) {\n handlers[i].call(this);\n }\n }\n this.$emit('hook:' + hook);\n },\n\n _makeReadFilters: function _makeReadFilters(names, $this) {\n if (!names.length) return [];\n var filters = this.$options.filters,\n self = this;\n return names.map(function (args) {\n args = _.slice.call(args, 0);\n var name = args.shift();\n var reader = filters[name] ? filters[name].read || filters[name] : _.noexist(self, name);\n return function (value, oldVal) {\n // don't modify args\n var thisArgs = [value].concat(args || []),\n i = thisArgs.indexOf('$this');\n thisArgs.push(oldVal);\n // replace $this\n if (~i) {\n thisArgs[i] = $this;\n }\n return args ? reader.apply(self, thisArgs) : reader.call(self, value, oldVal);\n };\n });\n },\n\n /**\n * Apply filters to a value\n *\n * @param {*} value\n * @param {Array} filters\n * @param {*} oldVal\n * @return {*}\n */\n applyFilters: function applyFilters(value, filters, oldVal) {\n if (!filters || !filters.length) {\n return value;\n }\n for (var i = 0, l = filters.length; i < l; i++) {\n value = filters[i].call(this, value, oldVal);\n }\n return value;\n }\n });\n\n _.extend(Q.prototype, Seed.prototype);\n\n return Q;\n };\n\n /***/\n },\n /* 5 */\n /***/function (module, exports, __webpack_require__) {\n\n var _ = __webpack_require__(1);\n\n /**\n * prefix data\n * @param {Data || DataArray} up\n * @param {String} key\n * @param {*} value\n * @param {Boolean} trigger or not\n */\n function _prefix(up, key, value, trigger) {\n var top = up._top,\n isArray = _isArray(value),\n options = {\n data: value,\n up: up,\n top: top,\n namespace: key + '',\n trigger: isArray ? false : trigger\n },\n\n // old value\n oldVal = top.data ? top.data(up.$namespace(key)) : undefined;\n\n if ((typeof value === 'undefined' ? 'undefined' : (0, _typeof3.default)(value)) === 'object' && value !== null) {\n up[key] = isArray ? new DataArray(options) : new Data(options);\n\n // trigger data change\n trigger && up.$change(up.$namespace(key), up[key], oldVal);\n } else if (oldVal !== value) {\n up[key] = value;\n // trigger data change\n trigger && up.$change(up.$namespace(key), value, oldVal);\n }\n if (!~up._keys.indexOf(key)) up._keys.push(key);\n }\n\n function _isArray(obj) {\n return Array.isArray(obj) || obj instanceof DataArray;\n }\n\n function _getLength(keys) {\n return keys.filter(function (key) {\n return typeof key === 'number';\n }).length;\n }\n\n /**\n * Data\n * @class\n * @param {Object} options\n */\n function Data(options) {\n var data = options.data,\n keys = (0, _keys2.default)(options.data || {}).filter(function (key) {\n return key.indexOf('_') !== 0;\n }).map(function (num) {\n return +num + '' === num ? +num : num;\n }),\n self = this;\n\n _.extend(this, data);\n\n // all key need to traverse\n this._keys = keys;\n // parent data container\n this._up = options.up;\n // the most top parent data container\n this._top = options.top || this;\n // the namespace of data\n this._namespace = options.namespace || '';\n keys.forEach(function (key) {\n _prefix(self, key, data[key], options.trigger);\n });\n // if it is a array\n _isArray(data) && (\n // fix the length\n this.length = _getLength(keys));\n }\n _.extend(Data.prototype, {\n /**\n * get the namespace\n */\n $namespace: function $namespace(key) {\n var keys = [],\n self = this;\n for (; self != undefined; self = self._up) {\n self._namespace && keys.unshift(self._namespace);\n }\n if (key) keys.push(key);\n return keys.join('.');\n },\n /**\n * get the key of it's parent\n */\n $key: function $key() {\n var key = this._namespace;\n return +key + '' === key ? +key : key;\n },\n /**\n * get the parent of the data\n */\n $up: function $up(num) {\n num = num || 1;\n for (var src = this; num--;) {\n src = src['_up'];\n }\n return src;\n },\n /**\n * set the value of the key\n */\n $set: function $set(key, value) {\n if ((typeof key === 'undefined' ? 'undefined' : (0, _typeof3.default)(key)) === 'object') {\n var self = this;\n (0, _keys2.default)(key).filter(function (k) {\n return k.indexOf('_') !== 0;\n }).forEach(function (k) {\n _prefix(self, k, key[k], true);\n });\n this.$change(this.$namespace(key), this, undefined, 1);\n } else {\n var oldValue = this[key];\n _prefix(this, key, value, true);\n // just bubble\n this.$change(this.$namespace(key), this[key], oldValue, undefined, -1);\n }\n return this;\n },\n /**\n * get the actual value\n */\n $get: function $get() {\n var res,\n keys = this._keys,\n self = this;\n if (this instanceof Data) {\n res = {};\n } else {\n res = [];\n }\n keys.forEach(function (key) {\n res[key] = self[key] == null ? self[key] : self[key].$get ? self[key].$get() : self[key];\n });\n return res;\n },\n /**\n * change\n * type = 0 just change\n * type = 1 trigger change & deep\n * type = -1 just deep\n */\n $change: function $change(key, value, oldVal, patch, type) {\n type = type || 0;\n var top = this._top;\n if (top.$emit) {\n ~type && this._top.$emit('data:' + key, value, oldVal, patch);\n type && this._top.$emit('deep:' + key, value, oldVal, patch);\n }\n }\n });\n\n /**\n * DataArray\n * Something just like Array\n * @class\n * @param {Object} options\n */\n function DataArray(options) {\n Data.call(this, options);\n }\n _.extend(DataArray.prototype, Data.prototype, {\n /**\n * push data\n */\n push: function push(values) {\n values = _.slice.call(arguments, 0);\n var res = [];\n for (var i = 0, l = values.length; i < l; i++) {\n _prefix(this, this.length, values[i]);\n this._keys.push(this.length);\n res.push(this[this.length]);\n this.length++;\n }\n // value, oldValue, patch\n this.$change(this.$namespace(), this, null, {\n method: 'push',\n res: res,\n args: values\n }, 1);\n\n return this;\n },\n /**\n * pop data\n */\n pop: function pop() {\n var res = this[--this.length];\n delete this[this.length];\n this._keys.pop();\n this.$change(this.$namespace(), this, null, undefined, 1);\n return res;\n },\n /**\n * unshift\n */\n unshift: function unshift(value) {\n this._keys.push(this.length);\n this.length++;\n for (var l = this.length; l--;) {\n this[l] = this[l - 1];\n // fixed namespace\n (0, _typeof3.default)(this[l]) === 'object' && (this[l]._namespace = l + '');\n }\n _prefix(this, 0, value);\n this.$change(this.$namespace(), this, null, undefined, 1);\n return this;\n },\n /**\n * shift\n */\n shift: function shift() {\n this.length--;\n var res = this[0];\n for (var i = 0, l = this.length; i < l; i++) {\n this[i] = this[i + 1];\n // fixed namespace\n (0, _typeof3.default)(this[i]) === 'object' && (this[i]._namespace = i + '');\n }\n this._keys.pop();\n delete this[this.length];\n this.$change(this.$namespace(), this, null, undefined, 1);\n return res;\n },\n /**\n * touch\n */\n touch: function touch(key) {\n this.$change(this.$namespace(key), this, null, undefined, 1);\n },\n /**\n * indexOf\n */\n indexOf: function indexOf(item) {\n if (item._up === this) {\n var i = +item._namespace;\n if (this[i] === item) return i;\n } else if ((typeof item === 'undefined' ? 'undefined' : (0, _typeof3.default)(item)) !== 'object') {\n for (var i = 0, l = this.length; i < l; i++) {\n if (this[i] === item) return i;\n }\n }\n return -1;\n },\n /**\n * splice\n */\n splice: function splice(i, l /**, items support later **/) {\n var patch = {\n method: 'splice',\n args: [i, l]\n };\n for (var j = 0, k = l + i, z = this.length - l; i < z; i++, j++) {\n this[i] = this[k + j];\n (0, _typeof3.default)(this[i]) === 'object' && (this[i]._namespace = i + '');\n }\n for (; i < this.length; i++) {\n this[i] = null;\n delete this[i];\n }\n this.length -= l;\n this._keys.splice(this.length, l);\n this.$change(this.$namespace(), this, null, patch, 1);\n },\n /**\n * forEach\n */\n forEach: function forEach(foo) {\n for (var i = 0, l = this.length; i < l; i++) {\n foo(this[i], i);\n }\n },\n /**\n * filter\n */\n filter: function filter(foo) {\n var res = [];\n this.forEach(function (item, i) {\n if (foo(item)) res.push(item);\n });\n return res;\n }\n });\n\n /**\n * Seed\n * @param {Object} options\n */\n function Seed(options) {\n Data.call(this, options);\n }\n _.extend(Seed, {\n Data: Data,\n DataArray: DataArray\n });\n _.extend(Seed.prototype, Data.prototype, {\n /**\n * Set data and Element value\n *\n * @param {String} key\n * @param {*} value\n * @returns {Data}\n */\n data: function data(key, value) {\n if (key === undefined) return this;\n var i = 0,\n l,\n data = this,\n next;\n if (~key.indexOf('.')) {\n var keys = key.split('.');\n for (l = keys.length; i < l - 1; i++) {\n key = keys[i];\n // key is number\n if (+key + '' === key) key = +key;\n if (key in data && data[key] != null) {\n data = data[key];\n } else if (value === undefined) {\n // data is undefind\n return undefined;\n } else {\n next = keys[i + 1];\n // next is number\n if (+next + '' == next) {\n // set a array\n _prefix(data, key, [], true);\n } else {\n // set a object\n _prefix(data, key, {}, true);\n }\n }\n }\n }\n l && (key = keys[i]);\n // if data === undefined, just return\n if (value === undefined) return data && key ? data[key] : data;\n data.$set(key, value);\n return data[key];\n }\n });\n\n module.exports = Seed;\n\n /***/\n },\n /* 6 */\n /***/function (module, exports, __webpack_require__) {\n\n var Data = __webpack_require__(5),\n _ = __webpack_require__(1);\n\n function emit(key, args, target) {\n // set the trigger target is pass in or this\n target = target || this;\n var cbs = this._events[key];\n if (cbs) {\n var i = 0;\n cbs = cbs.length > 1 ? _.slice.call(cbs, 0) : cbs;\n for (var l = cbs.length; i < l; i++) {\n cbs[i].apply(target, args);\n }\n }\n // emit parent\n // prevent data: event and hook: event trigger\n if (key.indexOf('data:') && key.indexOf('hook:') && key.indexOf('deep:') && this.$parent) {\n emit.call(this.$parent, key, args, target);\n }\n }\n\n function callChange(key, args) {\n var self = {\n _events: this._watchers\n };\n emit.call(self, key, args);\n emit.call(self, key + '**deep**', args);\n }\n\n function callDeep(key, args) {\n var props,\n nArgs,\n keys = key.split('.'),\n self = { _events: this._watchers };\n\n for (keys.pop(); keys.length > 0; keys.pop()) {\n key = keys.join('.');\n props = key + '**deep**';\n // remove the old value\n emit.call(self, props, [this.data(key)]);\n }\n // emit vm is change\n emit.call(self, '**deep**', [this]);\n }\n\n module.exports = {\n emit: emit,\n callChange: callChange,\n callDeep: callDeep\n };\n\n /***/\n },\n /* 7 */\n /***/function (module, exports, __webpack_require__) {\n\n var _ = __webpack_require__(1);\n\n var strats = {};\n strats.created = strats.ready = strats.attached = strats.detached = strats.compiled = strats.beforeDestroy = strats.destroyed = strats.paramAttributes = function (parentVal, childVal) {\n return childVal ? parentVal ? parentVal.concat(childVal) : Array.isArray(childVal) ? childVal : [childVal] : parentVal;\n };\n strats.data = strats.filters = strats.methods = strats.directives = function (parentVal, childVal) {\n if (!childVal) return parentVal;\n if (!parentVal) return childVal;\n return _.extend({}, parentVal, childVal);\n };\n\n var defaultStrat = function defaultStrat(parentVal, childVal) {\n return childVal === undefined ? parentVal : childVal;\n };\n\n /**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n *\n * All strategy functions follow the same signature:\n *\n * @param {*} parentVal\n * @param {*} childVal\n * @param {Vue} [vm]\n */\n function mergeOptions(parent, child, vm) {\n var options = {},\n key;\n for (key in parent) {\n merge(key);\n }\n for (key in child) {\n if (!parent.hasOwnProperty(key)) {\n merge(key);\n }\n }\n function merge(key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options;\n }\n\n module.exports = {\n strats: strats,\n mergeOptions: mergeOptions\n };\n\n /***/\n },\n /* 8 */\n /***/function (module, exports, __webpack_require__) {\n\n // Modules map\n var modules = {},\n mergeOptions = __webpack_require__(7).mergeOptions,\n listeners = {};\n\n function _define(name, options) {\n if (modules[name]) return false;\n var module = modules[name] = this.extend(options || {});\n return module;\n }\n\n function _require(name, callback) {\n return modules[name] || this;\n }\n\n function _create(o) {\n function F() {}\n F.prototype = o;\n return new F();\n }\n\n function _extend(extendOptions) {\n extendOptions = extendOptions || {};\n var Super = this,\n Sub = createClass(extendOptions.name || 'QComponent');\n Sub.prototype = _create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.options = mergeOptions(Super.options, extendOptions);\n Sub['super'] = Super;\n ['extend', 'get', 'all', 'require', 'define'].forEach(function (key) {\n Sub[key] = Super[key];\n });\n return Sub;\n }\n\n function createClass(name) {\n return new Function('return function ' + name + ' (options) { this._init(options) }')();\n }\n\n module.exports = {\n /**\n * define\n * define a component\n * @param {String} name\n * @param {Object} options\n */\n define: _define,\n /**\n * require\n * require(name)\n * require(names, callback)\n * require a component\n * @param {String} name\n * @param {Array} names\n * @param {Function} callback\n */\n require: _require,\n /**\n * extend\n * extend the class\n * @param {Object} options\n */\n extend: _extend\n };\n\n /***/\n },\n /* 9 */\n /***/function (module, exports, __webpack_require__) {\n\n var _ = __webpack_require__(1),\n strats = __webpack_require__(7);\n\n var PROP_REG = /^(.*)\\.([\\w\\-]+)$/;\n\n module.exports = {\n cloak: {\n bind: function bind() {\n var vm = this.vm,\n el = this.el;\n\n // after ready\n vm.$once('hook:ready', function () {\n // if data change\n vm.$once('datachange', function () {\n el.removeAttribute('q-cloak');\n });\n });\n }\n },\n show: function show(value) {\n var el = this.el;\n if (value) {\n el.style.display = '';\n var display = el.currentStyle ? el.currentStyle.display : getComputedStyle(el, null).display;\n if (display === 'none') {\n el.style.display = 'block';\n }\n } else {\n el.style.display = 'none';\n }\n },\n 'class': function _class(value) {\n var el = this.el,\n arg = this.arg;\n if (arg) {\n value ? _.addClass(el, arg) : _.removeClass(el, arg);\n } else {\n if (this.lastVal) {\n _.removeClass(el, this.lastVal);\n }\n if (value) {\n _.addClass(el, value);\n this.lastVal = value;\n }\n }\n },\n value: function value(_value) {\n var el = this.el;\n if (el.type === 'checkbox') {\n el.checked = _value;\n } else {\n el.value = _value;\n }\n },\n attr: function attr(value) {\n if (value === undefined) return;\n var arg = this.arg,\n el = this.el;\n // property\n if (arg === 'style') {\n if ((typeof value === 'undefined' ? 'undefined' : (0, _typeof3.default)(value)) === 'object') {\n for (var k in value) {\n if (value.hasOwnProperty(k)) {\n el.style[k] = value[k];\n }\n }\n } else {\n el.setAttribute(arg, value);\n }\n } else {\n if (arg in el) {\n el[arg] = value;\n } else {\n el.setAttribute(arg, value);\n }\n }\n },\n text: function text(value) {\n var text;\n\n value !== undefined && (text = typeof this.el.textContent === 'string' ? 'textContent' : 'innerText') && (this.el[text] = value == null ? '' : value.toString());\n },\n html: function html(value) {\n this.el.innerHTML = value && value.toString() || '';\n },\n on: {\n bind: function bind() {\n var self = this,\n key = this.target,\n param = this.param,\n filters = this.filters,\n vm = this.vm,\n handler = vm.applyFilters(this.vm[key], filters),\n data = param && ~param.indexOf('this') && self.data();\n _.add(this.el, this.arg, function (e) {\n if (!handler || typeof handler !== 'function') {\n return _.warn('You need implement the ' + key + ' method.');\n }\n var args = [];\n param ? param.forEach(function (arg) {\n if (arg === 'e') args.push(e);else if (arg === 'this') args.push(data);else if (arg === 'true') args.push(true);else if (arg === 'false') args.push(false);else if (+arg + '' === arg) args.push(+arg);else if (arg.match(/^(['\"]).*\\1$/)) args.push(arg.slice(1, -1));else args.push(self.data(arg));\n }) : args.push(e);\n\n handler.apply(vm, args);\n });\n }\n },\n model: {\n bind: function bind() {\n var keys = ((this.namespace ? this.namespace + '.' : '') + this.target).split('.'),\n key = keys.pop(),\n namespace = keys.join('.'),\n el = this.el,\n vm = this.vm,\n data = vm.data(namespace),\n composing = false;\n _.add(el, 'input propertychange change keypress keyup', function (e) {\n if (composing) return;\n data.$set(key, el.value);\n });\n _.add(el, 'compositionstart', function (e) {\n composing = true;\n });\n _.add(el, 'compositionend', function (e) {\n composing = false;\n });\n },\n update: function update(value) {\n if (this.el.value !== value) {\n this.el.value = value;\n }\n }\n },\n vm: {\n bind: function bind() {\n // stop walk\n this.setting.stop = true;\n\n // which component\n var name = this.target,\n vm = this.vm,\n el = this.el,\n\n // component reference\n ref = el.getAttribute('q-ref') || false,\n Child = vm.constructor.require(name),\n data = Child.options.data,\n options,\n childVm;\n\n options = {\n el: el,\n data: data,\n _parent: vm\n };\n\n childVm = new Child(options);\n\n vm._children.push(childVm);\n ref && !function () {\n var refs = vm.$[ref];\n refs ? refs.length ? refs.push(childVm) : vm.$[ref] = [refs, childVm] : vm.$[ref] = childVm;\n }();\n }\n },\n 'if': {\n bind: function bind() {\n // return if el is a template\n if (!this.el.parentNode) return;\n\n var tpl = this.el,\n parentNode = tpl.parentNode,\n ref = document.createComment('q-if'),\n hasInit = false,\n exist = true,\n key = this.target,\n namespace = this.namespace,\n target = _.get(namespace, key),\n readFilters = this.filters,\n data = this.data(),\n vm = this.vm;\n\n this.setting.stop = true;\n\n function _init(value) {\n // no exist no bind\n if (hasInit || !exist || !value) return;\n hasInit = true;\n vm._templateBind(tpl, {\n data: data,\n namespace: namespace,\n immediate: true\n });\n }\n\n vm.$watch(target, function (value, oldVal) {\n value = vm.applyFilters(value, readFilters, oldVal);\n\n _init(value);\n // need to init\n if (value === exist) return;\n // bind\n if (value === true) {\n parentNode.replaceChild(tpl, ref);\n exist = value;\n // unbind\n } else if (value === false) {\n parentNode.replaceChild(ref, tpl);\n exist = value;\n }\n\n _init(value);\n }, (0, _typeof3.default)(this.data(key)) === 'object', true);\n }\n },\n el: {\n bind: function bind() {\n this.vm.$$[this.target] = this.el;\n }\n },\n repeat: __webpack_require__(10)\n };\n\n /***/\n },\n /* 10 */\n /***/function (module, exports, __webpack_require__) {\n\n var _ = __webpack_require__(1);\n var methods = {\n 'default': {\n // how to clean the dom\n clean: function clean(parentNode, repeats) {\n if (repeats.length) {\n repeats.forEach(function (node) {\n // repeat element may has been remove\n node.parentNode === parentNode && parentNode.removeChild(node);\n });\n _.cleanData(repeats);\n repeats.length = 0;\n }\n },\n insert: function insert(parentNode, fragment, ref) {\n parentNode.insertBefore(fragment, ref);\n }\n },\n push: {\n insert: function insert(parentNode, fragment, ref) {\n parentNode.insertBefore(fragment, ref);\n },\n dp: function dp(data, patch) {\n return patch.res;\n }\n },\n splice: {\n clean: function clean(parentNode, repeats, value, watchers) {\n var i = value[0],\n l = value[1],\n target = value[2].$namespace(),\n eles = repeats.splice(i, l);\n eles.forEach(function (ele) {\n parentNode.removeChild(ele);\n });\n // just splice one time\n if (!value.done) {\n splice(watchers, target, i, l);\n value.done = true;\n }\n return true;\n },\n dp: function dp(data, patch) {\n patch.args.push(data);\n return patch.args;\n }\n }\n };\n\n function splice(watchers, target, i, l) {\n var length = target.length,\n subKey,\n cur,\n index,\n newKey;\n (0, _keys2.default)(watchers).forEach(function (key) {\n if (~key.indexOf(target)) {\n subKey = key.substring(length + 1);\n cur = subKey.split('.');\n if (cur.length) {\n index = +cur.shift();\n if ((index -= l) >= i) {\n cur.unshift(index);\n cur.unshift(target);\n newKey = cur.join('.');\n watchers[newKey] = watchers[key];\n delete watchers[key];\n }\n }\n }\n });\n }\n\n exports.bind = function () {\n var tpl = this.el,\n setting = this.setting,\n parentNode = tpl.parentNode,\n key,\n namespace,\n target,\n readFilters,\n repeats,\n ref,\n vm;\n // return\n if (!parentNode || setting.stop) return;\n\n // stop binding\n setting.stop = true;\n\n key = this.target;\n namespace = this.namespace;\n target = _.get(namespace, key);\n readFilters = this.filters;\n repeats = [];\n ref = document.createComment('q-repeat');\n vm = this.vm;\n\n parentNode.replaceChild(ref, tpl);\n\n vm.$watch(target, function (value, oldVal, patch) {\n value = vm.applyFilters(value, readFilters);\n // if value is undefined or null just return\n if (value == null) return;\n var method = !readFilters.length && patch ? patch.method : 'default',\n dp = (methods[method] || {}).dp,\n clean = (methods[method] || {}).clean,\n insert = (methods[method] || {}).insert;\n\n // if dp exists, proceess data\n dp && (value = dp(value, patch));\n\n if (clean && clean(parentNode, repeats, value, vm._watchers, target) === true) {\n return;\n }\n\n var fragment = document.createDocumentFragment(),\n itemNode;\n\n value.forEach(function (obj, i) {\n itemNode = _.clone(tpl);\n vm._templateBind(itemNode, {\n data: obj,\n namespace: obj.$namespace(),\n immediate: true\n });\n // TODO this must refactor\n repeats.push(itemNode);\n fragment.appendChild(itemNode);\n });\n\n insert && insert(parentNode, fragment, ref);\n vm.$emit('repeat-render');\n }, false, true);\n };\n\n /***/\n },\n /* 11 */\n /***/function (module, exports, __webpack_require__) {\n\n var parse = __webpack_require__(12),\n _ = __webpack_require__(1);\n\n module.exports = function (el, options) {\n options = options || {};\n\n var self = this,\n directives = self.$options.directives,\n index = options.index,\n data = options.data || self,\n namespace = options.namespace;\n\n _.walk([el], function (node, res, setting) {\n res.forEach(function (obj) {\n var name = obj.name.substring(2),\n directive = directives[name],\n descriptors = parse(obj.value);\n directive && descriptors.forEach(function (descriptor) {\n var readFilters = self._makeReadFilters(descriptor.filters, self.data(namespace)),\n key = descriptor.target,\n target = _.get(namespace, key),\n update = _.isObject(directive) ? directive.update : directive,\n that = _.extend({\n el: node,\n vm: self,\n data: function data(key) {\n return self.data(_.get(namespace, key));\n },\n namespace: namespace,\n setting: setting\n }, descriptor, {\n filters: readFilters\n }),\n tmp = that.data(key);\n\n update && self.$watch(target, function (value, oldValue) {\n value = self.applyFilters(value, readFilters, oldValue);\n update.call(that, value, oldValue);\n }, (typeof tmp === 'undefined' ? 'undefined' : (0, _typeof3.default)(tmp)) === 'object', _.alpaca ? false : typeof options.immediate === 'boolean' ? options.immediate : tmp !== undefined);\n if (_.isObject(directive) && directive.bind) directive.bind.call(that);\n });\n });\n });\n };\n\n /***/\n },\n /* 12 */\n /***/function (module, exports, __webpack_require__) {\n\n var cache = new (__webpack_require__(2))(1000),\n tokens = [\n // space\n [/^ +/],\n // arg\n [/^([\\w\\-]+):/, function (captures, status) {\n status.token.arg = captures[1];\n }],\n // function\n [/^([\\w]+)\\((.+?)\\)/, function (captures, status) {\n status.token.target = captures[1];\n status.token.param = captures[2].split(/ *, */);\n }],\n // target\n [/^([\\w\\-\\.\\$]+)/, function (captures, status) {\n status.token.target = captures[1];\n }],\n // filter\n [/^(?=\\|)/, function (captures, status) {\n status.filter = true;\n }],\n // next\n [/^,/, function (captures, status, res) {\n res.push(status.token);\n status.token = {\n filters: []\n };\n }]],\n filterREG = /^(.+?)(?=,|$)/,\n filterTokens = [\n // space\n [/^ +/],\n // filter\n [/^\\| *([\\w\\-\\!]+)/, function (captures, filters) {\n filters.push([captures[1]]);\n }],\n // string\n [/^(['\"])(((\\\\['\"])?([^\\1])*)+)\\1/, function (captures, filters) {\n filters[filters.length - 1].push(captures[3]);\n }],\n // arg\n [/^([\\w\\-\\$]+)/, function (captures, filters) {\n filters[filters.length - 1].push(captures[1]);\n }]];\n /**\n * click: onclick | filter1 | filter2\n * click: onclick , keydown: onkeydown\n * click: onclick(this)\n * click: onclick(e, this)\n * value1 | filter1 | filter2\n * value - 1 | filter1 | filter2 don't support\n */\n function parse(str) {\n var name = str,\n hit = cache.get(name);\n if (hit) return hit;\n\n var res = [],\n captures,\n i,\n l = tokens.length,\n foo,\n\n // if has token or not\n has = false,\n status = {\n // if in filter or not\n filter: false,\n // just token object\n token: {\n filters: []\n }\n };\n\n while (str.length) {\n for (i = 0; i < l; i++) {\n if (captures = tokens[i][0].exec(str)) {\n var has = true;\n var foo = tokens[i][1];\n foo && foo(captures, status, res);\n str = str.replace(tokens[i][0], '');\n if (status.filter) {\n captures = filterREG.exec(str);\n parseFilter(captures[0].trim(), status.token);\n str = str.replace(filterREG, '');\n status.filter = false;\n }\n break;\n }\n }\n if (has) {\n has = false;\n } else {\n throw new Error('Syntax error at: ' + str);\n }\n }\n\n res.push(status.token);\n cache.put(name, res);\n return res;\n }\n\n function parseFilter(str, token) {\n var i,\n l = filterTokens.length,\n has = false;\n while (str.length) {\n for (i = 0; i < l; i++) {\n var captures = filterTokens[i][0].exec(str);\n if (captures) {\n var has = true;\n var foo = filterTokens[i][1];\n foo && foo(captures, token.filters);\n str = str.replace(filterTokens[i][0], '');\n break;\n }\n }\n if (has) {\n has = false;\n } else {\n throw new Error('Syntax error at: ' + str);\n }\n }\n }\n\n module.exports = parse;\n\n /***/\n }\n /******/])\n );\n});\n;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(94)(module)))\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Utc3JjL2pzL1EuanM/MjM0OSJdLCJuYW1lcyI6WyJ3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsIm1vZHVsZXMiLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaWQiLCJsb2FkZWQiLCJjYWxsIiwibSIsImMiLCJwIiwidXRpbHMiLCJfIiwiZXh0ZW5kIiwibm9vcCIsImRlZmVyIiwid2luZG93IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2V0VGltZW91dCIsImNhY2hlIiwicHJpb3JpdGllcyIsIl9xdGlkIiwiX3NsaWNlIiwic2xpY2UiLCJfYWxwYWNhIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImJvZHkiLCJjaGlsZE5vZGVzIiwiZSIsImkiLCJyZXMiLCJsIiwibGVuZ3RoIiwicHVzaCIsImdldEF0dHJpYnV0ZSIsIl9sb29wUHJpb3JpdHkiLCJlbCIsInNldHRpbmciLCJhdHRyIiwidG1wIiwiaiIsIm5hbWUiLCJ2YWx1ZSIsInJlbW92ZUF0dHJpYnV0ZSIsIndhbGsiLCIkZWwiLCJjYiIsImF0dHMiLCJxdGlkIiwibm9kZVR5cGUiLCJhdHRyaWJ1dGVzIiwiaW5kZXhPZiIsInN0b3AiLCJhZGRDbGFzcyIsImNscyIsImNsYXNzTGlzdCIsImFkZCIsImN1ciIsImNsYXNzTmFtZSIsInRyaW0iLCJyZW1vdmVDbGFzcyIsInJlbW92ZSIsInRhciIsInJlcGxhY2UiLCJub2V4aXN0Iiwidm0iLCJ3YXJuIiwiRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJhcHBseSIsImFyZ3VtZW50cyIsImlzT2JqZWN0IiwibyIsIm5leHRUaWNrIiwiY3R4IiwiZ2V0IiwibmFtZXNwYWNlIiwia2V5IiwiYXJyIiwiam9pbiIsImFscGFjYSIsIkNhY2hlIiwibGltaXQiLCJzaXplIiwiaGVhZCIsInRhaWwiLCJ1bmRlZmluZWQiLCJfa2V5bWFwIiwicHJvdG90eXBlIiwicHV0IiwiZW50cnkiLCJuZXdlciIsIm9sZGVyIiwic2hpZnQiLCJyZXR1cm5FbnRyeSIsIkRFTEVHQVRPUl9DQUxMQkFDS1NfS0VZIiwiTk9fREVMRUdBVE9SIiwibW91c2VvdmVyIiwiY2hhbmdlIiwiaW5wdXQiLCJwb3JwZXJ0eWNoYW5nZSIsIl9leHRlbmQiLCJ0YXJnZXQiLCJzcmNzIiwic3BsaWNlIiwic3JjIiwiX2V4cGFuZG8iLCJfdWlkIiwiX21hcCIsImNvbnRhaW5zIiwiYSIsImIiLCJkYXRhIiwidWlkIiwiZXZ0IiwiZm4iLCJzcGxpdCIsImZvckVhY2giLCJhZGRFdmVudExpc3RlbmVyIiwiZmluZCIsInNlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCIsImNsZWFuRGF0YSIsImVscyIsImNicyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjbG9uZSIsImVsZSIsImNsb25lTm9kZSIsIlNlZWQiLCJldmVudHMiLCJNQVJLIiwibWVyZ2VPcHRpb25zIiwiY2xhcyIsIl9kb2MiLCJfaW5Eb2MiLCJkb2N1bWVudEVsZW1lbnQiLCJRIiwib3B0aW9ucyIsIl9pbml0IiwiZGlyZWN0aXZlcyIsImZpbHRlcnMiLCJhbGwiLCJzZWxmIiwibWFwIiwiJCQiLCIkcGFyZW50IiwiX3BhcmVudCIsIiRvcHRpb25zIiwiY29uc3RydWN0b3IiLCJfaXNDb21waWxlZCIsIl9pc0F0dGFjaGVkIiwiX2lzUmVhZHkiLCJfZXZlbnRzIiwiX3dhdGNoZXJzIiwiX2NoaWxkcmVuIiwiJCIsIl9pbml0U2NvcGUiLCJfY2FsbEhvb2siLCIkbW91bnQiLCIkb24iLCJldmVudCIsIiRvbmNlIiwib24iLCIkb2ZmIiwiJHdhdGNoIiwiZXhwIiwiZGVlcCIsImltbWVkaWF0ZSIsIiRlbWl0IiwiYXJncyIsImVtaXQiLCJzdWJzdHJpbmciLCJjYWxsQ2hhbmdlIiwiY2FsbERlZXAiLCJ1bnNoaWZ0IiwiX2luaXRNZXRob2RzIiwibWV0aG9kcyIsImJpbmQiLCJfY29tcGlsZSIsIl9yZWFkeSIsInRyYW5zY2x1ZSIsIl90ZW1wbGF0ZUJpbmQiLCJob29rIiwiaGFuZGxlcnMiLCJfbWFrZVJlYWRGaWx0ZXJzIiwibmFtZXMiLCIkdGhpcyIsInJlYWRlciIsInJlYWQiLCJvbGRWYWwiLCJ0aGlzQXJncyIsImNvbmNhdCIsImFwcGx5RmlsdGVycyIsIl9wcmVmaXgiLCJ1cCIsInRyaWdnZXIiLCJ0b3AiLCJfdG9wIiwiaXNBcnJheSIsIl9pc0FycmF5IiwiJG5hbWVzcGFjZSIsIkRhdGFBcnJheSIsIkRhdGEiLCIkY2hhbmdlIiwiX2tleXMiLCJvYmoiLCJBcnJheSIsIl9nZXRMZW5ndGgiLCJrZXlzIiwiZmlsdGVyIiwibnVtIiwiX3VwIiwiX25hbWVzcGFjZSIsIiRrZXkiLCIkdXAiLCIkc2V0IiwiayIsIm9sZFZhbHVlIiwiJGdldCIsInBhdGNoIiwidHlwZSIsInZhbHVlcyIsIm1ldGhvZCIsInBvcCIsInRvdWNoIiwiaXRlbSIsInoiLCJmb28iLCJuZXh0IiwicHJvcHMiLCJuQXJncyIsInN0cmF0cyIsImNyZWF0ZWQiLCJyZWFkeSIsImF0dGFjaGVkIiwiZGV0YWNoZWQiLCJjb21waWxlZCIsImJlZm9yZURlc3Ryb3kiLCJkZXN0cm95ZWQiLCJwYXJhbUF0dHJpYnV0ZXMiLCJwYXJlbnRWYWwiLCJjaGlsZFZhbCIsImRlZmF1bHRTdHJhdCIsInBhcmVudCIsImNoaWxkIiwibWVyZ2UiLCJoYXNPd25Qcm9wZXJ0eSIsInN0cmF0IiwibGlzdGVuZXJzIiwiX2RlZmluZSIsIl9yZXF1aXJlIiwiY2FsbGJhY2siLCJfY3JlYXRlIiwiRiIsImV4dGVuZE9wdGlvbnMiLCJTdXBlciIsIlN1YiIsImNyZWF0ZUNsYXNzIiwiRnVuY3Rpb24iLCJkZWZpbmUiLCJyZXF1aXJlIiwiUFJPUF9SRUciLCJjbG9hayIsInNob3ciLCJzdHlsZSIsImRpc3BsYXkiLCJjdXJyZW50U3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiYXJnIiwibGFzdFZhbCIsImNoZWNrZWQiLCJzZXRBdHRyaWJ1dGUiLCJ0ZXh0IiwidGV4dENvbnRlbnQiLCJ0b1N0cmluZyIsImh0bWwiLCJpbm5lckhUTUwiLCJwYXJhbSIsImhhbmRsZXIiLCJtYXRjaCIsIm1vZGVsIiwiY29tcG9zaW5nIiwidXBkYXRlIiwicmVmIiwiQ2hpbGQiLCJjaGlsZFZtIiwicmVmcyIsInBhcmVudE5vZGUiLCJ0cGwiLCJjcmVhdGVDb21tZW50IiwiaGFzSW5pdCIsImV4aXN0IiwicmVhZEZpbHRlcnMiLCJyZXBsYWNlQ2hpbGQiLCJyZXBlYXQiLCJjbGVhbiIsInJlcGVhdHMiLCJub2RlIiwicmVtb3ZlQ2hpbGQiLCJpbnNlcnQiLCJmcmFnbWVudCIsImluc2VydEJlZm9yZSIsImRwIiwid2F0Y2hlcnMiLCJlbGVzIiwiZG9uZSIsInN1YktleSIsImluZGV4IiwibmV3S2V5IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIml0ZW1Ob2RlIiwiYXBwZW5kQ2hpbGQiLCJwYXJzZSIsImRpcmVjdGl2ZSIsImRlc2NyaXB0b3JzIiwiZGVzY3JpcHRvciIsInRoYXQiLCJ0b2tlbnMiLCJjYXB0dXJlcyIsInN0YXR1cyIsInRva2VuIiwiZmlsdGVyUkVHIiwiZmlsdGVyVG9rZW5zIiwic3RyIiwiaGl0IiwiaGFzIiwiZXhlYyIsInBhcnNlRmlsdGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7OztBQU9BOzs7O0FBSUEsQ0FBQyxTQUFTQSxnQ0FBVCxDQUEwQ0MsSUFBMUMsRUFBZ0RDLE9BQWhELEVBQXlEO0FBQ3RELFFBQUcsOENBQU9DLE9BQVAsT0FBbUIsUUFBbkIsSUFBK0IsOENBQU9DLE1BQVAsT0FBa0IsUUFBcEQsRUFDSUEsT0FBT0QsT0FBUCxHQUFpQkQsU0FBakIsQ0FESixLQUVLLElBQUcsSUFBSCxFQUNELGlDQUFPLEVBQVAsb0NBQVdBLE9BQVgsNlNBREMsS0FFQSxJQUFHLFFBQU9DLE9BQVAsdURBQU9BLE9B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QUFVakQsSUFBVixFQUFnQlgsR0FBaEI7QUFDQSx1QkFBT0EsR0FBUDtBQUNIOztBQUVELHFCQUFTMlMsV0FBVCxDQUFxQkosR0FBckIsRUFBMEJILEtBQTFCLEVBQWlDO0FBQzdCLG9CQUFJclMsQ0FBSjtBQUFBLG9CQUFPRSxJQUFJcVMsYUFBYXBTLE1BQXhCO0FBQUEsb0JBQ0l1UyxNQUFNLEtBRFY7QUFFQSx1QkFBT0YsSUFBSXJTLE1BQVgsRUFBbUI7QUFDZix5QkFBS0gsSUFBSSxDQUFULEVBQVlBLElBQUlFLENBQWhCLEVBQW1CRixHQUFuQixFQUF3QjtBQUN2Qiw0QkFBSW1TLFdBQVdJLGFBQWF2UyxDQUFiLEVBQWdCLENBQWhCLEVBQW1CMlMsSUFBbkIsQ0FBd0JILEdBQXhCLENBQWY7QUFDRyw0QkFBSUwsUUFBSixFQUFjO0FBQ1YsZ0NBQUlPLE1BQU0sSUFBVjtBQUNBLGdDQUFJbEcsTUFBTStGLGFBQWF2UyxDQUFiLEVBQWdCLENBQWhCLENBQVY7QUFDQXdNLG1DQUFPQSxJQUFJMkYsUUFBSixFQUFjRSxNQUFNcEwsT0FBcEIsQ0FBUDtBQUNBdUwsa0NBQU1BLElBQUl0USxPQUFKLENBQVlxUSxhQUFhdlMsQ0FBYixFQUFnQixDQUFoQixDQUFaLEVBQWdDLEVBQWhDLENBQU47QUFDQTtBQUNIO0FBQ0o7QUFDRCx3QkFBSTBTLEdBQUosRUFBUztBQUNMQSw4QkFBTSxLQUFOO0FBQ0gscUJBRkQsTUFFTztBQUNILDhCQUFNLElBQUlwUSxLQUFKLENBQVUsc0JBQXNCa1EsR0FBaEMsQ0FBTjtBQUNIO0FBQ0o7QUFDSjs7QUFFRHZVLG1CQUFPRCxPQUFQLEdBQWlCNlQsS0FBakI7O0FBR0o7QUFBTztBQUNQLGdCQXQxRFUsQ0ExQ007QUFBaEI7QUFpNERDLENBMzRERDtBQTQ0REEsQyIsImZpbGUiOiI3Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogUS5qcyB2MS4wLjEyXG4gKiBJbnNwaXJlZCBmcm9tIHZ1ZS5qc1xuICogKGMpIDIwMTYgRGFuaWVsIFlhbmdcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuIFxuLyoqXG4gKiBKdXN0IHN1cHBvcnQgbW9kZXJuIGJyb3dzZXJcbiAqL1xuIFxuKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuICAgICAgICBkZWZpbmUoW10sIGZhY3RvcnkpO1xuICAgIGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuICAgICAgICBleHBvcnRzW1wiUVwiXSA9IGZhY3RvcnkoKTtcbiAgICBlbHNlXG4gICAgICAgIHJvb3RbXCJRXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gICAgLy8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gICAgdmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbiBcbi8qKioqKiovICAgIC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyAgICBmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4gXG4vKioqKioqLyAgICAgICAgLy8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyAgICAgICAgaWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyAgICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFxuLyoqKioqKi8gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyAgICAgICAgdmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gICAgICAgICAgICBleHBvcnRzOiB7fSxcbi8qKioqKiovICAgICAgICAgICAgaWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gICAgICAgICAgICBsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyAgICAgICAgfTtcbiBcbi8qKioqKiovICAgICAgICAvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovICAgICAgICBtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbiBcbi8qKioqKiovICAgICAgICAvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyAgICAgICAgbW9kdWxlLmxvYWRlZCA9IHRydWU7XG4gXG4vKioqKioqLyAgICAgICAgLy8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovICAgICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyAgICB9XG4gXG4gXG4vKioqKioqLyAgICAvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gICAgX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbiBcbi8qKioqKiovICAgIC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuIFxuLyoqKioqKi8gICAgLy8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovICAgIF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4gXG4vKioqKioqLyAgICAvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovICAgIHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gXG4gICAgdmFyIHV0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKSxcbiAgICAgICAgXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyksXG4gICAgICAgIGZhY3RvcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpXG4gXG4gICAgXy5leHRlbmQodXRpbHMsIF8pO1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSh1dGlscyk7XG4gXG4gXG4vKioqLyB9LFxuLyogMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gXG4gICAgdmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgZGVmZXIgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICAgICAgICB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICAgICAgICBzZXRUaW1lb3V0LFxuICAgICAgICBjYWNoZSA9IG5ldyAoX193ZWJwYWNrX3JlcXVpcmVfXygyKSkoMTAwMCksXG4gICAgICAgIC8vIHByaW9yaXR5IGRpcmVjdGl2ZXNcbiAgICAgICAgcHJpb3JpdGllcyA9IFsndm0nLCAncmVwZWF0JywgJ2lmJ10sXG4gICAgICAgIF9xdGlkID0gMCxcbiAgICAgICAgX3NsaWNlID0gW10uc2xpY2UsXG4gICAgICAgIF9hbHBhY2EgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdLFxuICAgICAgICBzbGljZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgX3NsaWNlLmNhbGwoZG9jdW1lbnQuYm9keS5jaGlsZE5vZGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3NsaWNlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKHRoaXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSgpO1xuIFxuICAgIF9hbHBhY2EgJiYgKF9hbHBhY2EgPSBfYWxwYWNhLmdldEF0dHJpYnV0ZSgnYWxwYWNhJykpO1xuIFxuICAgIGZ1bmN0aW9uIF9sb29wUHJpb3JpdHkoZWwsIHJlcywgc2V0dGluZykge1xuICAgICAgICB2YXIgYXR0ciwgdG1wO1xuIFxuICAgICAgICAvLyBUT0RPIG5lZWQgb3B0aW1pemF0aW9uXG4gICAgICAgIGZvciAodmFyIGogPSAwLCBsID0gcHJpb3JpdGllcy5sZW5ndGg7IGogPCBsOyBqKyspIHtcbiAgICAgICAgICAgIGF0dHIgPSAncS0nICsgcHJpb3JpdGllc1tqXTtcbiAgICAgICAgICAgIGlmICh0bXAgPSBlbC5nZXRBdHRyaWJ1dGUoYXR0cikpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGF0dHIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0bXBcbiAgICAgICAgICAgICAgICB9KTtcbiBcbiAgICAgICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoYXR0cik7XG4gICAgICAgICAgICAgICAgLy8gaGFzIHByaW9yaXR5IGRpcmVjdGl2ZVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuIFxuICAgIGZ1bmN0aW9uIHdhbGsoJGVsLCBjYiwgc2V0dGluZykge1xuICAgICAgICBzZXR0aW5nID0gc2V0dGluZyB8fCB7fTtcbiAgICAgICAgdmFyIGksIGosIGwsIGVsLCBhdHRzLCByZXMsIHF0aWQ7XG4gICAgICAgIGZvciAoaSA9IDA7IGVsID0gJGVsW2krK107KSB7XG4gICAgICAgICAgICBpZiAoZWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBhdHRzID0gZWwuYXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiBcbiAgICAgICAgICAgICAgICAvLyBsb29wIHRoZSBwcmlvcml0eSBkaXJlY3RpdmVcbiAgICAgICAgICAgICAgICBpZiAoIV9sb29wUHJpb3JpdHkoZWwsIHJlcywgc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9vcCBvdGhlciBkaXJlY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMCwgbCA9IGF0dHMubGVuZ3RoOyBqIDwgbDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRzW2pdLm5hbWUuaW5kZXhPZigncS0nKSA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXR0c1tqXS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXR0c1tqXS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgY2IoZWwsIHJlcywgc2V0dGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWwuY2hpbGROb2Rlcy5sZW5ndGggJiYgIXNldHRpbmcuc3RvcCkgd2FsayhzbGljZS5jYWxsKGVsLmNoaWxkTm9kZXMsIDApLCBjYiwgc2V0dGluZyk7XG4gICAgICAgICAgICAvLyByZXNldCBzdG9wXG4gICAgICAgICAgICBzZXR0aW5nLnN0b3AgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiBcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgc2xpY2U6IHNsaWNlLFxuICAgICAgICBub29wOiBub29wLFxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgSUUgJiBTVkdcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICAgICAgICAgKiBAcGFyYW0ge1N0cm9uZ30gY2xzXG4gICAgICAgICAqL1xuICAgICAgICBhZGRDbGFzczogZnVuY3Rpb24gKGVsLCBjbHMpIHtcbiAgICAgICAgICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKGNscyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBjdXIgPSAnICcgKyAoZWwuY2xhc3NOYW1lIHx8ICcnKSArICcgJztcbiAgICAgICAgICAgICAgICBpZiAoY3VyLmluZGV4T2YoJyAnICsgY2xzICsgJyAnKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NOYW1lID0gKGN1ciArIGNscykudHJpbSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbW92ZSBjbGFzcyB3aXRoIGNvbXBhdGliaWxpdHkgZm9yIElFICYgU1ZHXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAgICAgICAgICogQHBhcmFtIHtTdHJvbmd9IGNsc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uIChlbCwgY2xzKSB7XG4gICAgICAgICAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgY3VyID0gJyAnICsgKGVsLmNsYXNzTmFtZSB8fCAnJykgKyAnICcsXG4gICAgICAgICAgICAgICAgICAgIHRhciA9ICcgJyArIGNscyArICcgJztcbiAgICAgICAgICAgICAgICB3aGlsZSAoY3VyLmluZGV4T2YodGFyKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWwuY2xhc3NOYW1lID0gY3VyLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbm9leGlzdDogZnVuY3Rpb24gKHZtLCBuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLndhcm4odm0pO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWx0ZXIgJyArIG5hbWUgKyAnIGhhc25cXCd0IGltcGxlbWVudGVkLicpO1xuICAgICAgICB9LFxuICAgICAgICB3YXJuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUuZXJyb3IpID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfSA6IG5vb3A7XG4gICAgICAgIH0oKSxcbiAgICAgICAgaXNPYmplY3Q6IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnO1xuICAgICAgICB9LFxuICAgICAgICBuZXh0VGljazogZnVuY3Rpb24gKGNiLCBjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHggP1xuICAgICAgICAgICAgICAgIGRlZmVyKGZ1bmN0aW9uICgpIHsgY2IuY2FsbChjdHgpIH0sIDApIDpcbiAgICAgICAgICAgICAgICBkZWZlcihjYiwgMCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBnZXRcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5XG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIChuYW1lc3BhY2UsIGtleSkge1xuICAgICAgICAgICAgdmFyIGFyciA9IFtdO1xuICAgICAgICAgICAgbmFtZXNwYWNlICYmIGFyci5wdXNoKG5hbWVzcGFjZSk7XG4gICAgICAgICAgICBrZXkgJiYgYXJyLnB1c2goa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBhcnIuam9pbignLicpLnJlcGxhY2UoL14oLitcXC4pP1xcJHRvcFxcLi8sICcnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Fsazogd2FsayxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFscGFjYVxuICAgICAgICAgKiBqdXN0IGEgZmxhZ1xuICAgICAgICAgKi9cbiAgICAgICAgYWxwYWNhOiAhIV9hbHBhY2FcbiAgICB9O1xuIFxuIFxuLyoqKi8gfSxcbi8qIDIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuIFxuICAgIC8qKlxuICAgICAqIGp1c3QgYSBjb3B5IG9mOiBodHRwczovL2dpdGh1Yi5jb20veXl4OTkwODAzL3Z1ZS9ibG9iL21hc3Rlci9zcmMvY2FjaGUuanNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBsaW1pdFxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuIFxuICAgIGZ1bmN0aW9uIENhY2hlIChsaW1pdCkge1xuICAgICAgICB0aGlzLnNpemUgPSAwO1xuICAgICAgICB0aGlzLmxpbWl0ID0gbGltaXQ7XG4gICAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fa2V5bWFwID0ge307XG4gICAgfVxuIFxuICAgIHZhciBwID0gQ2FjaGUucHJvdG90eXBlO1xuIFxuICAgIC8qKlxuICAgICAqIFB1dCA8dmFsdWU+IGludG8gdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCA8a2V5Pi5cbiAgICAgKiBSZXR1cm5zIHRoZSBlbnRyeSB3aGljaCB3YXMgcmVtb3ZlZCB0byBtYWtlIHJvb20gZm9yXG4gICAgICogdGhlIG5ldyBlbnRyeS4gT3RoZXJ3aXNlIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cbiAgICAgKiAoaS5lLiBpZiB0aGVyZSB3YXMgZW5vdWdoIHJvb20gYWxyZWFkeSkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5XG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgICAqIEByZXR1cm4ge0VudHJ5fHVuZGVmaW5lZH1cbiAgICAgKi9cbiBcbiAgICBwLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHtcbiAgICAgICAgICAgIGtleTprZXksXG4gICAgICAgICAgICB2YWx1ZTp2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2tleW1hcFtrZXldID0gZW50cnk7XG4gICAgICAgIGlmICh0aGlzLnRhaWwpIHtcbiAgICAgICAgICAgIHRoaXMudGFpbC5uZXdlciA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkub2xkZXIgPSB0aGlzLnRhaWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSA9PT0gdGhpcy5saW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2l6ZSsrO1xuICAgICAgICB9XG4gICAgfTtcbiBcbiAgICAvKipcbiAgICAgKiBQdXJnZSB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCAob2xkZXN0KSBlbnRyeSBmcm9tIHRoZVxuICAgICAqIGNhY2hlLiBSZXR1cm5zIHRoZSByZW1vdmVkIGVudHJ5IG9yIHVuZGVmaW5lZCBpZiB0aGVcbiAgICAgKiBjYWNoZSB3YXMgZW1wdHkuXG4gICAgICovXG4gXG4gICAgcC5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5oZWFkO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXdlcjtcbiAgICAgICAgICAgIHRoaXMuaGVhZC5vbGRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGVudHJ5Lm5ld2VyID0gZW50cnkub2xkZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLl9rZXltYXBbZW50cnkua2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgfTtcbiBcbiAgICAvKipcbiAgICAgKiBHZXQgYW5kIHJlZ2lzdGVyIHJlY2VudCB1c2Ugb2YgPGtleT4uIFJldHVybnMgdGhlIHZhbHVlXG4gICAgICogYXNzb2NpYXRlZCB3aXRoIDxrZXk+IG9yIHVuZGVmaW5lZCBpZiBub3QgaW4gY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5XG4gICAgICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5FbnRyeVxuICAgICAqIEByZXR1cm4ge0VudHJ5fCp9XG4gICAgICovXG4gXG4gICAgcC5nZXQgPSBmdW5jdGlvbiAoa2V5LCByZXR1cm5FbnRyeSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9rZXltYXBba2V5XTtcbiAgICAgICAgaWYgKGVudHJ5ID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgICAgaWYgKGVudHJ5ID09PSB0aGlzLnRhaWwpIHtcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5FbnRyeSA/XG4gICAgICAgICAgICAgICAgZW50cnkgOlxuICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAvLyBIRUFELS0tLS0tLS0tLS0tLS1UQUlMXG4gICAgICAvLyAgIDwub2xkZXIgICAubmV3ZXI+XG4gICAgICAvLyAgPC0tLSBhZGQgZGlyZWN0aW9uIC0tXG4gICAgICAvLyAgIEEgIEIgIEMgIDxEPiAgRVxuICAgICAgICBpZiAoZW50cnkubmV3ZXIpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeSA9PT0gdGhpcy5oZWFkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkID0gZW50cnkubmV3ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRyeS5uZXdlci5vbGRlciA9IGVudHJ5Lm9sZGVyOyAvLyBDIDwtLSBFLlxuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeS5vbGRlcikge1xuICAgICAgICAgICAgZW50cnkub2xkZXIubmV3ZXIgPSBlbnRyeS5uZXdlcjsgLy8gQy4gLS0+IEVcbiAgICAgICAgfVxuICAgICAgICBlbnRyeS5uZXdlciA9IHVuZGVmaW5lZDsgLy8gRCAtLXhcbiAgICAgICAgZW50cnkub2xkZXIgPSB0aGlzLnRhaWw7IC8vIEQuIC0tPiBFXG4gICAgICAgIGlmICh0aGlzLnRhaWwpIHtcbiAgICAgICAgICAgIHRoaXMudGFpbC5uZXdlciA9IGVudHJ5OyAvLyBFLiA8LS0gRFxuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFpbCA9IGVudHJ5O1xuICAgICAgICByZXR1cm4gcmV0dXJuRW50cnkgP1xuICAgICAgICAgICAgZW50cnkgOlxuICAgICAgICAgICAgZW50cnkudmFsdWU7XG4gICAgfVxuIFxuICAgIG1vZHVsZS5leHBvcnRzID0gQ2FjaGU7XG4gXG4gXG4vKioqLyB9LFxuLyogMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG4gXG4gICAgdmFyIERFTEVHQVRPUl9DQUxMQkFDS1NfS0VZID0gJ19fY2JzX18nLFxuICAgICAgICBOT19ERUxFR0FUT1IgPSB7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IG1vdXNlb3ZlciB0cmlnZ2VyIG1vcmUgdGhhbiBvbmUgdGltZVxuICAgICAgICAgICAgbW91c2VvdmVyOiB0cnVlLFxuICAgICAgICAgICAgY2hhbmdlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQ6IHRydWUsXG4gICAgICAgICAgICBwb3JwZXJ0eWNoYW5nZTogdHJ1ZVxuICAgICAgICB9O1xuICAgIHZhciBfZXh0ZW5kID0gZnVuY3Rpb24gKHRhcmdldCwgc3Jjcykge1xuICAgICAgICAgICAgc3JjcyA9IFtdLnNwbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICB2YXIgaSA9IDAsIGwgPSBzcmNzLmxlbmd0aCwgc3JjLCBrZXk7XG4gICAgICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyY3NbaV07XG4gICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gc3JjKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSxcbiAgICAgICAgX2V4cGFuZG8gPSAnUURhdGFVaWQnLFxuICAgICAgICBfdWlkID0gMCxcbiAgICAgICAgX21hcCA9IHt9O1xuIFxuICAgIGZ1bmN0aW9uIGNvbnRhaW5zKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEgIT09IGIgJiYgYS5jb250YWlucyhiKTtcbiAgICB9XG4gXG4gICAgZnVuY3Rpb24gZGF0YShlbCwga2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdWlkID0gZWxbX2V4cGFuZG9dID0gZWxbX2V4cGFuZG9dIHx8ICsrX3VpZCxcbiAgICAgICAgICAgIGRhdGEgPSBfbWFwW3VpZF0gPSBfbWFwW3VpZF0gfHwge307XG4gICAgICAgIC8vIHNldCBEYXRhXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGF0YVtrZXldO1xuICAgICAgICByZXR1cm4gKGRhdGFba2V5XSA9IHZhbHVlKTtcbiAgICB9XG4gXG4gICAgZnVuY3Rpb24gYWRkKGVsLCBldnQsIGZuKSB7XG4gICAgICAgIGV2dC5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZSwgZm4sIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuIFxuICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBmaW5kOiBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvciksIDApO1xuICAgICAgICB9LFxuICAgICAgICBjb250YWluczogY29udGFpbnMsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGNsZWFuRGF0YTogZnVuY3Rpb24gKGVscykge1xuICAgICAgICAgICAgdmFyIHVpZFxuICAgICAgICAgICAgZWxzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHVpZCA9IGVsW19leHBhbmRvXTtcbiAgICAgICAgICAgICAgICAvLyBoYXMgZGF0YVxuICAgICAgICAgICAgICAgIHVpZCAmJiAodWlkIGluIF9tYXApICYmXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGUgX21hcFt1aWRdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChlbCwgZXZ0LCBmbiwgdm0pIHtcbiAgICAgICAgICAgIGlmICghdm0gfHwgTk9fREVMRUdBVE9SW2V2dF0pIHtcbiAgICAgICAgICAgICAgICBhZGQoZWwsIGV2dCwgZm4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgJGVsID0gdm0uJGVsLFxuICAgICAgICAgICAgICAgICAgICBjYnMgPSBkYXRhKCRlbCwgREVMRUdBVE9SX0NBTExCQUNLU19LRVkpO1xuICAgICAgICAgICAgICAgIGlmICghY2JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNicyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhKCRlbCwgREVMRUdBVE9SX0NBTExCQUNLU19LRVksIGNicyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZCgkZWwsIGV2dCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldFxuICAgICAgICAgICAgICAgICAgICAgICAgY2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gY2IuZm4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsID0gY2IuZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zKGVsLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuLmNhbGwoZWwsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcHVzaFxuICAgICAgICAgICAgICAgIGNicy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZWw6IGVsLFxuICAgICAgICAgICAgICAgICAgICBmbjogZm5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiAoZWwsIGV2dCwgZm4pIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0LCBmbiwgZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBjbG9uZTogZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGV4dGVuZDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHJldHVybiBfZXh0ZW5kKHRoaXMsIHRhcmdldCk7XG4gICAgICAgICAgICByZXR1cm4gX2V4dGVuZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfTtcbiBcbiBcbi8qKiovIH0sXG4vKiA0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiBcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChfKSB7XG4gXG4gICAgICAgIHZhciBTZWVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSxcbiAgICAgICAgICAgIGV2ZW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNiksXG4gICAgICAgICAgICBNQVJLID0gL1xce1xceyguKz8pXFx9XFx9LyxcbiAgICAgICAgICAgIG1lcmdlT3B0aW9ucyA9IF9fd2VicGFja19yZXF1aXJlX18oNykubWVyZ2VPcHRpb25zLFxuICAgICAgICAgICAgY2xhcyA9IF9fd2VicGFja19yZXF1aXJlX18oOCksXG4gICAgICAgICAgICBfZG9jID0gZG9jdW1lbnQ7XG4gXG4gICAgICAgIGZ1bmN0aW9uIF9pbkRvYyhlbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBfLmNvbnRhaW5zKF9kb2MuZG9jdW1lbnRFbGVtZW50LCBlbGUpO1xuICAgICAgICB9XG4gXG4gICAgICAgIC8vIGxpZmVjeWNsZTogY3JlYXRlZCAtPiBjb21waWxlZFxuIFxuICAgICAgICAvKipcbiAgICAgICAgICogUVxuICAgICAgICAgKiBAY2xhc3NcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIFEob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5faW5pdChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHBvcnRzIHV0aWxzXG4gICAgICAgIFEuXyA9IF87XG4gICAgICAgIFEub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IF9fd2VicGFja19yZXF1aXJlX18oOSksXG4gICAgICAgICAgICBmaWx0ZXJzOiB7fVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogZ2V0XG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nIHwgRWxlbWVudH0gc2VsZWN0b3JcbiAgICAgICAgICogQHJldHVybiB7UX1cbiAgICAgICAgICovXG4gICAgICAgIFEuZ2V0ID0gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICB2YXIgZWxlID0gXy5maW5kKHNlbGVjdG9yKVswXTtcbiAgICAgICAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXy5kYXRhKGVsZSwgJ1FJJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyh7IGVsOiBzZWxlY3RvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFsbFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgUS5hbGwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIF8uZmluZChvcHRpb25zLmVsKS5tYXAoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgc2VsZihfLmV4dGVuZChvcHRpb25zLCB7IGVsOiBlbGUgfSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIF8uZXh0ZW5kKFEsIGNsYXMpO1xuICAgICAgICBfLmV4dGVuZChRLnByb3RvdHlwZSwge1xuICAgICAgICAgICAgX2luaXQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICAgICAgdGhpcy4kZWwgPSBvcHRpb25zLmVsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5lbCA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uZmluZChvcHRpb25zLmVsKVswXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5lbDtcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50IHJlZmVyZW5jZXNcbiAgICAgICAgICAgICAgICB0aGlzLiQkID0ge307XG4gICAgICAgICAgICAgICAgLy8gc2V0IHBhcmVudCB2bVxuICAgICAgICAgICAgICAgIHRoaXMuJHBhcmVudCA9IG9wdGlvbnMuX3BhcmVudDtcbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBvcHRpb25zXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3Iub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgLy8gbGlmZWN5Y2xlIHN0YXRlXG4gICAgICAgICAgICAgICAgdGhpcy5faXNDb21waWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1JlYWR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gZXZlbnRzIGJvb2trZWVwaW5nXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hlcnMgPSB7fTtcbiBcbiAgICAgICAgICAgICAgICAvLyBjb21wb25lbnRzXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAvLyBjb21wb25lbnRzIHJlZmVyZW5jZXNcbiAgICAgICAgICAgICAgICB0aGlzLiQgPSB7fTtcbiBcbiAgICAgICAgICAgICAgICBTZWVkLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5fZGF0YSA9IG9wdGlvbnMuZGF0YTtcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIGRhdGEgYW5kIHNjb3BlIGluaGVyaXRhbmNlLlxuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRTY29wZSgpO1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgY3JlYXRlZCBob29rXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2NyZWF0ZWQnKTtcbiAgICAgICAgICAgICAgICAvLyBzdGFydCBjb21waWxhdGlvblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRlbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjYWNoZSB0aGUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgXy5kYXRhKHRoaXMuJGVsLCAnUUknLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbW91bnQodGhpcy4kZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIExpc3RlbiBvbiB0aGUgZ2l2ZW4gYGV2ZW50YCB3aXRoIGBmbmAuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAkb246IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICAgICAgICAgICAgICAodGhpcy5fZXZlbnRzW2V2ZW50XSB8fCAodGhpcy5fZXZlbnRzW2V2ZW50XSA9IFtdKSlcbiAgICAgICAgICAgICAgICAgICAgLnB1c2goZm4pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWRkcyBhbiBgZXZlbnRgIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBpbnZva2VkIGEgc2luZ2xlXG4gICAgICAgICAgICAgKiB0aW1lIHRoZW4gYXV0b21hdGljYWxseSByZW1vdmVkLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgJG9uY2U6IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuJG9mZihldmVudCwgb24pO1xuICAgICAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvbi5mbiA9IGZuO1xuICAgICAgICAgICAgICAgIHRoaXMuJG9uKGV2ZW50LCBvbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZW1vdmUgdGhlIGdpdmVuIGNhbGxiYWNrIGZvciBgZXZlbnRgIG9yIGFsbFxuICAgICAgICAgICAgICogcmVnaXN0ZXJlZCBjYWxsYmFja3MuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgICAgICAgICAgICovXG4gXG4gICAgICAgICAgICAkb2ZmOiBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicywgY2IsIGk7XG4gICAgICAgICAgICAgICAgLy8gYWxsIGV2ZW50XG4gICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgICAgICAgICAgICAgICBjYnMgPSB0aGlzLl9ldmVudHNbZXZlbnRdO1xuICAgICAgICAgICAgICAgIGlmICghY2JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnRdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljIGhhbmRsZXJcbiAgICAgICAgICAgICAgICBpID0gY2JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiID0gY2JzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2JzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2F0Y2ggYW4gZXhwcmVzc2lvbiwgdHJpZ2dlciBjYWxsYmFjayB3aGVuIGl0c1xuICAgICAgICAgICAgICogdmFsdWUgY2hhbmdlcy5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXhwXG4gICAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYlxuICAgICAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBbZGVlcF1cbiAgICAgICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2ltbWVkaWF0ZV1cbiAgICAgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSAtIHVud2F0Y2hGblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAkd2F0Y2g6IGZ1bmN0aW9uIChleHAsIGNiLCBkZWVwLCBpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gZGVlcCA/IGV4cCArICcqKmRlZXAqKicgOiBleHA7XG4gICAgICAgICAgICAgICAgKHRoaXMuX3dhdGNoZXJzW2tleV0gfHwgKHRoaXMuX3dhdGNoZXJzW2tleV0gPSBbXSkpXG4gICAgICAgICAgICAgICAgICAgIC5wdXNoKGNiKTtcbiAgICAgICAgICAgICAgICBpbW1lZGlhdGUgJiYgY2IodGhpcy5kYXRhKGV4cCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVHJpZ2dlciBhbiBldmVudCBvbiBzZWxmLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICRlbWl0OiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gXy5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgZXZlbnRzLmVtaXQuY2FsbCh0aGlzLCBlLCBfLnNsaWNlLmNhbGwoYXJncywgMCkpO1xuICAgICAgICAgICAgICAgIC8vIGVtaXQgZGF0YSBjaGFuZ2VcbiAgICAgICAgICAgICAgICBpZiAoIWUuaW5kZXhPZignZGF0YTonKSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gZS5zdWJzdHJpbmcoNSk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50cy5jYWxsQ2hhbmdlLmNhbGwodGhpcywgZSwgXy5zbGljZS5jYWxsKGFyZ3MsIDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFlLmluZGV4T2YoJ2RlZXA6JykpIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IGUuc3Vic3RyaW5nKDUpO1xuICAgICAgICAgICAgICAgICAgICBldmVudHMuY2FsbERlZXAuY2FsbCh0aGlzLCBlLCBfLnNsaWNlLmNhbGwoYXJncywgMCkpO1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQoZSk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0LmNhbGwodGhpcywgJ2RhdGFjaGFuZ2UnLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZXR1cCB0aGUgc2NvcGUgb2YgYW4gaW5zdGFuY2UsIHdoaWNoIGNvbnRhaW5zOlxuICAgICAgICAgICAgICogLSBvYnNlcnZlZCBkYXRhXG4gICAgICAgICAgICAgKiAtIGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAqIC0gdXNlciBtZXRob2RzXG4gICAgICAgICAgICAgKiAtIG1ldGEgcHJvcGVydGllc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBfaW5pdFNjb3BlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdE1ldGhvZHMoKTtcbiAgICAgICAgICAgIH0sXG4gXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNldHVwIGluc3RhbmNlIG1ldGhvZHMuIE1ldGhvZHMgbXVzdCBiZSBib3VuZCB0byB0aGVcbiAgICAgICAgICAgICAqIGluc3RhbmNlIHNpbmNlIHRoZXkgbWlnaHQgYmUgY2FsbGVkIGJ5IGNoaWxkcmVuXG4gICAgICAgICAgICAgKiBpbmhlcml0aW5nIHRoZW0uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIF9pbml0TWV0aG9kczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBtZXRob2RzID0gdGhpcy4kb3B0aW9ucy5tZXRob2RzLCBrZXk7XG4gICAgICAgICAgICAgICAgaWYgKG1ldGhvZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXldID0gbWV0aG9kc1trZXldLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZXQgaW5zdGFuY2UgdGFyZ2V0IGVsZW1lbnQgYW5kIGtpY2sgb2ZmIHRoZSBjb21waWxhdGlvblxuICAgICAgICAgICAgICogcHJvY2Vzcy4gVGhlIHBhc3NlZCBpbiBgZWxgIGNhbiBiZSBhIHRlbXBsYXRlIHN0cmluZywgYW5cbiAgICAgICAgICAgICAqIGV4aXN0aW5nIEVsZW1lbnQsIG9yIGEgRG9jdW1lbnRGcmFnbWVudCAoZm9yIGJsb2NrXG4gICAgICAgICAgICAgKiBpbnN0YW5jZXMpLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfEVsZW1lbnR8RG9jdW1lbnRGcmFnbWVudH0gZWxcbiAgICAgICAgICAgICAqIEBwdWJsaWNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgJG1vdW50OiBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNDb21waWxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy53YXJuKCckbW91bnQoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGZvciB0ZW1wbGF0ZSB8fCB3ZSBtYXkgbm90IGRvIGZvciB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIC8vIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcGlsZShlbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNDb21waWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2NvbXBpbGVkJyk7XG4gICAgICAgICAgICAgICAgaWYgKF9pbkRvYyh0aGlzLiRlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2F0dGFjaGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kb25jZSgnaG9vazphdHRhY2hlZCcsIHRoaXMuX3JlYWR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiByZWFkeVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBfcmVhZHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0F0dGFjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1JlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsSG9vaygncmVhZHknKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRyYW5zY2x1ZGUsIGNvbXBpbGUgYW5kIGxpbmsgZWxlbWVudC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBJZiBhIHByZS1jb21waWxlZCBsaW5rZXIgaXMgYXZhaWxhYmxlLCB0aGF0IG1lYW5zIHRoZVxuICAgICAgICAgICAgICogcGFzc2VkIGluIGVsZW1lbnQgd2lsbCBiZSBwcmUtdHJhbnNjbHVkZWQgYW5kIGNvbXBpbGVkXG4gICAgICAgICAgICAgKiBhcyB3ZWxsIC0gYWxsIHdlIG5lZWQgdG8gZG8gaXMgdG8gY2FsbCB0aGUgbGlua2VyLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIE90aGVyd2lzZSB3ZSBuZWVkIHRvIGNhbGwgdHJhbnNjbHVkZS9jb21waWxlL2xpbmsgaGVyZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gICAgICAgICAgICAgKiBAcmV0dXJuIHtFbGVtZW50fVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBfY29tcGlsZTogZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2NsdWUoZWwsIHRoaXMuJG9wdGlvbnMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUHJvY2VzcyBhbiBlbGVtZW50IG9yIGEgRG9jdW1lbnRGcmFnbWVudCBiYXNlZCBvbiBhXG4gICAgICAgICAgICAgKiBpbnN0YW5jZSBvcHRpb24gb2JqZWN0LiBUaGlzIGFsbG93cyB1cyB0byB0cmFuc2NsdWRlXG4gICAgICAgICAgICAgKiBhIHRlbXBsYXRlIG5vZGUvZnJhZ21lbnQgYmVmb3JlIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLFxuICAgICAgICAgICAgICogc28gdGhlIHByb2Nlc3NlZCBmcmFnbWVudCBjYW4gdGhlbiBiZSBjbG9uZWQgYW5kIHJldXNlZFxuICAgICAgICAgICAgICogaW4gdi1yZXBlYXQuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbFxuICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdHJhbnNjbHVlOiBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAvLyBqdXN0IGJpbmQgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZUJpbmQoZWwsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSxcbiBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogYmluZCByZW5kZXJlZCB0ZW1wbGF0ZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBfdGVtcGxhdGVCaW5kOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSxcbiBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVHJpZ2dlciBhbGwgaGFuZGxlcnMgZm9yIGEgaG9va1xuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBob29rXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIF9jYWxsSG9vazogZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLiRvcHRpb25zW2hvb2tdO1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNbaV0uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdob29rOicgKyBob29rKTtcbiAgICAgICAgICAgIH0sXG4gXG4gICAgICAgICAgICBfbWFrZVJlYWRGaWx0ZXJzOiBmdW5jdGlvbiAobmFtZXMsICR0aGlzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW1lcy5sZW5ndGgpIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsdGVycyA9IHRoaXMuJG9wdGlvbnMuZmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVzLm1hcChmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gXy5zbGljZS5jYWxsKGFyZ3MsIDApO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IChmaWx0ZXJzW25hbWVdID8gKGZpbHRlcnNbbmFtZV0ucmVhZCB8fCBmaWx0ZXJzW25hbWVdKSA6IF8ubm9leGlzdChzZWxmLCBuYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIG9sZFZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgbW9kaWZ5IGFyZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGlzQXJncyA9IFt2YWx1ZV0uY29uY2F0KGFyZ3MgfHwgW10pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB0aGlzQXJncy5pbmRleE9mKCckdGhpcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0FyZ3MucHVzaChvbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSAkdGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0FyZ3NbaV0gPSAkdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuYXBwbHkoc2VsZiwgdGhpc0FyZ3MpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLmNhbGwoc2VsZiwgdmFsdWUsIG9sZFZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBcHBseSBmaWx0ZXJzIHRvIGEgdmFsdWVcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAgICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBmaWx0ZXJzXG4gICAgICAgICAgICAgKiBAcGFyYW0geyp9IG9sZFZhbFxuICAgICAgICAgICAgICogQHJldHVybiB7Kn1cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYXBwbHlGaWx0ZXJzOiBmdW5jdGlvbiAodmFsdWUsIGZpbHRlcnMsIG9sZFZhbCkge1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVycyB8fCAhZmlsdGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGZpbHRlcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZmlsdGVyc1tpXS5jYWxsKHRoaXMsIHZhbHVlLCBvbGRWYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuIFxuICAgICAgICBfLmV4dGVuZChRLnByb3RvdHlwZSwgU2VlZC5wcm90b3R5cGUpO1xuIFxuICAgICAgICByZXR1cm4gUTtcbiAgICB9O1xuIFxuIFxuLyoqKi8gfSxcbi8qIDUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuIFxuICAgIHZhciBfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbiBcbiAgICAvKipcbiAgICAgKiBwcmVmaXggZGF0YVxuICAgICAqIEBwYXJhbSB7RGF0YSB8fCBEYXRhQXJyYXl9IHVwXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGtleVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHRyaWdnZXIgb3Igbm90XG4gICAgICovXG4gICAgZnVuY3Rpb24gX3ByZWZpeCh1cCwga2V5LCB2YWx1ZSwgdHJpZ2dlcikge1xuICAgICAgICB2YXIgdG9wID0gdXAuX3RvcCxcbiAgICAgICAgICAgIGlzQXJyYXkgPSBfaXNBcnJheSh2YWx1ZSksXG4gICAgICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHVwOiB1cCxcbiAgICAgICAgICAgICAgICB0b3A6IHRvcCxcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IGtleSArICcnLFxuICAgICAgICAgICAgICAgIHRyaWdnZXI6IGlzQXJyYXkgPyBmYWxzZSA6IHRyaWdnZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBvbGQgdmFsdWVcbiAgICAgICAgICAgIG9sZFZhbCA9IHRvcC5kYXRhID8gdG9wLmRhdGEodXAuJG5hbWVzcGFjZShrZXkpKSA6IHVuZGVmaW5lZDtcbiBcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHVwW2tleV0gPSAgIGlzQXJyYXkgP1xuICAgICAgICAgICAgICAgIG5ldyBEYXRhQXJyYXkob3B0aW9ucykgOlxuICAgICAgICAgICAgICAgICAgICBuZXcgRGF0YShvcHRpb25zKTtcbiBcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgZGF0YSBjaGFuZ2VcbiAgICAgICAgICAgIHRyaWdnZXIgJiYgdXAuJGNoYW5nZSh1cC4kbmFtZXNwYWNlKGtleSksIHVwW2tleV0sIG9sZFZhbCk7XG4gICAgICAgIH0gZWxzZSBpZiAob2xkVmFsICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdXBba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgLy8gdHJpZ2dlciBkYXRhIGNoYW5nZVxuICAgICAgICAgICAgdHJpZ2dlciAmJiB1cC4kY2hhbmdlKHVwLiRuYW1lc3BhY2Uoa2V5KSwgdmFsdWUsIG9sZFZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEofnVwLl9rZXlzLmluZGV4T2Yoa2V5KSkpIHVwLl9rZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gXG4gICAgZnVuY3Rpb24gX2lzQXJyYXkob2JqKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iaikgfHwgb2JqIGluc3RhbmNlb2YgRGF0YUFycmF5O1xuICAgIH1cbiBcbiAgICBmdW5jdGlvbiBfZ2V0TGVuZ3RoKGtleXMpIHtcbiAgICAgICAgcmV0dXJuIGtleXMuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Yga2V5ID09PSAnbnVtYmVyJztcbiAgICAgICAgfSkubGVuZ3RoO1xuICAgIH1cbiBcbiAgICAvKipcbiAgICAgKiBEYXRhXG4gICAgICogQGNsYXNzXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEYXRhKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsXG4gICAgICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucy5kYXRhIHx8IHt9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5LmluZGV4T2YoJ18nKSAhPT0gMDsgfSlcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICtudW0gKyAnJyA9PT0gbnVtID8gK251bSA6IG51bTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNlbGYgPSB0aGlzO1xuIFxuICAgICAgICBfLmV4dGVuZCh0aGlzLCBkYXRhKTtcbiBcbiAgICAgICAgLy8gYWxsIGtleSBuZWVkIHRvIHRyYXZlcnNlXG4gICAgICAgIHRoaXMuX2tleXMgPSBrZXlzO1xuICAgICAgICAvLyBwYXJlbnQgZGF0YSBjb250YWluZXJcbiAgICAgICAgdGhpcy5fdXAgPSBvcHRpb25zLnVwO1xuICAgICAgICAvLyB0aGUgbW9zdCB0b3AgcGFyZW50IGRhdGEgY29udGFpbmVyXG4gICAgICAgIHRoaXMuX3RvcCA9IG9wdGlvbnMudG9wIHx8IHRoaXM7XG4gICAgICAgIC8vIHRoZSBuYW1lc3BhY2Ugb2YgZGF0YVxuICAgICAgICB0aGlzLl9uYW1lc3BhY2UgPSBvcHRpb25zLm5hbWVzcGFjZSB8fCAnJztcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIF9wcmVmaXgoc2VsZiwga2V5LCBkYXRhW2tleV0sIG9wdGlvbnMudHJpZ2dlcik7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpZiBpdCBpcyBhIGFycmF5XG4gICAgICAgIF9pc0FycmF5KGRhdGEpICAmJlxuICAgICAgICAgICAgLy8gZml4IHRoZSBsZW5ndGhcbiAgICAgICAgICAgICh0aGlzLmxlbmd0aCA9IF9nZXRMZW5ndGgoa2V5cykpO1xuICAgIH1cbiAgICBfLmV4dGVuZChEYXRhLnByb3RvdHlwZSwge1xuICAgICAgICAvKipcbiAgICAgICAgICogZ2V0IHRoZSBuYW1lc3BhY2VcbiAgICAgICAgICovXG4gICAgICAgICRuYW1lc3BhY2U6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gW10sXG4gICAgICAgICAgICAgICAgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBmb3IgKDsgc2VsZiAhPSB1bmRlZmluZWQ7IHNlbGYgPSBzZWxmLl91cCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX25hbWVzcGFjZSAmJlxuICAgICAgICAgICAgICAgICAgICBrZXlzLnVuc2hpZnQoc2VsZi5fbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkpIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGtleXMuam9pbignLicpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogZ2V0IHRoZSBrZXkgb2YgaXQncyBwYXJlbnRcbiAgICAgICAgICovXG4gICAgICAgICRrZXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9uYW1lc3BhY2U7XG4gICAgICAgICAgICByZXR1cm4gK2tleSArICcnID09PSBrZXkgPyAra2V5IDoga2V5O1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogZ2V0IHRoZSBwYXJlbnQgb2YgdGhlIGRhdGFcbiAgICAgICAgICovXG4gICAgICAgICR1cDogZnVuY3Rpb24gKG51bSkge1xuICAgICAgICAgICAgbnVtID0gbnVtIHx8IDE7XG4gICAgICAgICAgICBmb3IgKHZhciBzcmMgPSB0aGlzOyBudW0tLTspIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmNbJ191cCddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNyYztcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldCB0aGUgdmFsdWUgb2YgdGhlIGtleVxuICAgICAgICAgKi9cbiAgICAgICAgJHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhrZXkpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gay5pbmRleE9mKCdfJykgIT09IDA7XG4gICAgICAgICAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgICAgICAgICBfcHJlZml4KHNlbGYsIGssIGtleVtrXSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy4kY2hhbmdlKHRoaXMuJG5hbWVzcGFjZShrZXkpLCB0aGlzLCB1bmRlZmluZWQsIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzW2tleV07XG4gICAgICAgICAgICAgICAgX3ByZWZpeCh0aGlzLCBrZXksIHZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAvLyBqdXN0IGJ1YmJsZVxuICAgICAgICAgICAgICAgIHRoaXMuJGNoYW5nZSh0aGlzLiRuYW1lc3BhY2Uoa2V5KSwgdGhpc1trZXldLCBvbGRWYWx1ZSwgdW5kZWZpbmVkLCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGdldCB0aGUgYWN0dWFsIHZhbHVlXG4gICAgICAgICAqL1xuICAgICAgICAkZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzLCBrZXlzID0gdGhpcy5fa2V5cywgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIERhdGEpIHtcbiAgICAgICAgICAgICAgICByZXMgPSB7fTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIHJlc1trZXldID0gc2VsZltrZXldID09IG51bGwgP1xuICAgICAgICAgICAgICAgICAgICBzZWxmW2tleV0gOlxuICAgICAgICAgICAgICAgICAgICBzZWxmW2tleV0uJGdldCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmW2tleV0uJGdldCgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZVxuICAgICAgICAgKiB0eXBlID0gMCBqdXN0IGNoYW5nZVxuICAgICAgICAgKiB0eXBlID0gMSB0cmlnZ2VyIGNoYW5nZSAmIGRlZXBcbiAgICAgICAgICogdHlwZSA9IC0xIGp1c3QgZGVlcFxuICAgICAgICAgKi9cbiAgICAgICAgJGNoYW5nZTogZnVuY3Rpb24gKGtleSwgdmFsdWUsIG9sZFZhbCwgcGF0Y2gsIHR5cGUpIHtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8IDA7XG4gICAgICAgICAgICB2YXIgdG9wID0gdGhpcy5fdG9wO1xuICAgICAgICAgICAgaWYgKHRvcC4kZW1pdCkge1xuICAgICAgICAgICAgICAgIH50eXBlICYmIHRoaXMuX3RvcC4kZW1pdCgnZGF0YTonICsga2V5LCB2YWx1ZSwgb2xkVmFsLCBwYXRjaCk7XG4gICAgICAgICAgICAgICAgdHlwZSAmJiB0aGlzLl90b3AuJGVtaXQoJ2RlZXA6JyArIGtleSwgdmFsdWUsIG9sZFZhbCwgcGF0Y2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gXG4gICAgLyoqXG4gICAgICogRGF0YUFycmF5XG4gICAgICogU29tZXRoaW5nIGp1c3QgbGlrZSBBcnJheVxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICovXG4gICAgZnVuY3Rpb24gRGF0YUFycmF5KG9wdGlvbnMpIHtcbiAgICAgICAgRGF0YS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBfLmV4dGVuZChEYXRhQXJyYXkucHJvdG90eXBlLCBEYXRhLnByb3RvdHlwZSwge1xuICAgICAgICAvKipcbiAgICAgICAgICogcHVzaCBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICBwdXNoOiBmdW5jdGlvbiAodmFsdWVzKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSBfLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIF9wcmVmaXgodGhpcywgdGhpcy5sZW5ndGgsIHZhbHVlc1tpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5cy5wdXNoKHRoaXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICByZXMucHVzaCh0aGlzW3RoaXMubGVuZ3RoXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHZhbHVlLCBvbGRWYWx1ZSwgcGF0Y2hcbiAgICAgICAgICAgIHRoaXMuJGNoYW5nZSh0aGlzLiRuYW1lc3BhY2UoKSwgdGhpcywgbnVsbCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ3B1c2gnLFxuICAgICAgICAgICAgICAgIHJlczogcmVzLFxuICAgICAgICAgICAgICAgIGFyZ3M6IHZhbHVlc1xuICAgICAgICAgICAgfSwgMSk7XG4gXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIHBvcCBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICBwb3A6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzWy0tdGhpcy5sZW5ndGhdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXNbdGhpcy5sZW5ndGhdO1xuICAgICAgICAgICAgdGhpcy5fa2V5cy5wb3AoKTtcbiAgICAgICAgICAgIHRoaXMuJGNoYW5nZSh0aGlzLiRuYW1lc3BhY2UoKSwgdGhpcywgbnVsbCwgdW5kZWZpbmVkLCAxKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiB1bnNoaWZ0XG4gICAgICAgICAqL1xuICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleXMucHVzaCh0aGlzLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCsrO1xuICAgICAgICAgICAgZm9yICh2YXIgbCA9IHRoaXMubGVuZ3RoOyBsLS07KSB7XG4gICAgICAgICAgICAgICAgdGhpc1tsXSA9IHRoaXNbbCAtIDFdO1xuICAgICAgICAgICAgICAgIC8vIGZpeGVkIG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzW2xdID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICAgICAodGhpc1tsXS5fbmFtZXNwYWNlID0gbCArICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9wcmVmaXgodGhpcywgMCwgdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy4kY2hhbmdlKHRoaXMuJG5hbWVzcGFjZSgpLCB0aGlzLCBudWxsLCB1bmRlZmluZWQsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBzaGlmdFxuICAgICAgICAgKi9cbiAgICAgICAgc2hpZnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoLS07XG4gICAgICAgICAgICB2YXIgcmVzID0gdGhpc1swXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzW2ldID0gdGhpc1tpICsgMV07XG4gICAgICAgICAgICAgICAgLy8gZml4ZWQgbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXNbaV0gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgICAgICh0aGlzW2ldLl9uYW1lc3BhY2UgPSBpICsgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fa2V5cy5wb3AoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzW3RoaXMubGVuZ3RoXTtcbiAgICAgICAgICAgIHRoaXMuJGNoYW5nZSh0aGlzLiRuYW1lc3BhY2UoKSwgdGhpcywgbnVsbCwgdW5kZWZpbmVkLCAxKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0b3VjaFxuICAgICAgICAgKi9cbiAgICAgICAgdG91Y2g6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHRoaXMuJGNoYW5nZSh0aGlzLiRuYW1lc3BhY2Uoa2V5KSwgdGhpcywgbnVsbCwgdW5kZWZpbmVkLCAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGluZGV4T2ZcbiAgICAgICAgICovXG4gICAgICAgIGluZGV4T2Y6IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5fdXAgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSA9ICtpdGVtLl9uYW1lc3BhY2U7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBpdGVtKSByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBzcGxpY2VcbiAgICAgICAgICovXG4gICAgICAgIHNwbGljZTogZnVuY3Rpb24gKGksIGwgLyoqLCBpdGVtcyBzdXBwb3J0IGxhdGVyICoqLykge1xuICAgICAgICAgICAgdmFyIHBhdGNoID0ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ3NwbGljZScsXG4gICAgICAgICAgICAgICAgYXJnczogW2ksIGxdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBsICsgaSwgeiA9IHRoaXMubGVuZ3RoIC0gbDsgaSA8IHo7IGkrKywgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tpXSA9IHRoaXNbayArIGpdO1xuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzW2ldID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICAgICAodGhpc1tpXS5fbmFtZXNwYWNlID0gaSArICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoO2kgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tpXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCAtPSBsO1xuICAgICAgICAgICAgdGhpcy5fa2V5cy5zcGxpY2UodGhpcy5sZW5ndGgsIGwpO1xuICAgICAgICAgICAgdGhpcy4kY2hhbmdlKHRoaXMuJG5hbWVzcGFjZSgpLCB0aGlzLCBudWxsLCBwYXRjaCwgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBmb3JFYWNoXG4gICAgICAgICAqL1xuICAgICAgICBmb3JFYWNoOiBmdW5jdGlvbiAoZm9vKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9vKHRoaXNbaV0sIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogZmlsdGVyXG4gICAgICAgICAqL1xuICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uIChmb28pIHtcbiAgICAgICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICAgICAgICAgIGlmIChmb28oaXRlbSkpIHJlcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgfSk7XG4gXG4gICAgLyoqXG4gICAgICogU2VlZFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICovXG4gICAgZnVuY3Rpb24gU2VlZChvcHRpb25zKSB7XG4gICAgICAgIERhdGEuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgXy5leHRlbmQoU2VlZCwge1xuICAgICAgICBEYXRhOiBEYXRhLFxuICAgICAgICBEYXRhQXJyYXk6IERhdGFBcnJheVxuICAgIH0pO1xuICAgIF8uZXh0ZW5kKFNlZWQucHJvdG90eXBlLCBEYXRhLnByb3RvdHlwZSwge1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0IGRhdGEgYW5kIEVsZW1lbnQgdmFsdWVcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGtleVxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAgICAgICAqIEByZXR1cm5zIHtEYXRhfVxuICAgICAgICAgKi9cbiAgICAgICAgZGF0YTogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB2YXIgaSA9IDAsIGwsIGRhdGEgPSB0aGlzLCBuZXh0O1xuICAgICAgICAgICAgaWYgKH5rZXkuaW5kZXhPZignLicpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBmb3IgKGwgPSBrZXlzLmxlbmd0aDsgaSA8IGwgLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgLy8ga2V5IGlzIG51bWJlclxuICAgICAgICAgICAgICAgICAgICBpZiAoK2tleSArICcnID09PSBrZXkpIGtleSA9ICtrZXk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gZGF0YSAmJiBkYXRhW2tleV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIGlzIHVuZGVmaW5kXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGtleXNbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpcyBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrbmV4dCArICcnID09IG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgYSBhcnJheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wcmVmaXgoZGF0YSwga2V5LCBbXSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCBhIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wcmVmaXgoZGF0YSwga2V5LCB7fSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsICYmIChrZXkgPSBrZXlzW2ldKTtcbiAgICAgICAgICAgIC8vIGlmIGRhdGEgPT09IHVuZGVmaW5lZCwganVzdCByZXR1cm5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGF0YSAmJiBrZXkgPyBkYXRhW2tleV0gOiBkYXRhO1xuICAgICAgICAgICAgZGF0YS4kc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuIFxuICAgIG1vZHVsZS5leHBvcnRzID0gU2VlZDtcbiBcbiBcbi8qKiovIH0sXG4vKiA2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiBcbiAgICB2YXIgRGF0YSA9IF9fd2VicGFja19yZXF1aXJlX18oNSksXG4gICAgICAgIF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuIFxuICAgIGZ1bmN0aW9uIGVtaXQoa2V5LCBhcmdzLCB0YXJnZXQpIHtcbiAgICAgICAgLy8gc2V0IHRoZSB0cmlnZ2VyIHRhcmdldCBpcyBwYXNzIGluIG9yIHRoaXNcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0IHx8IHRoaXM7XG4gICAgICAgIHZhciBjYnMgPSB0aGlzLl9ldmVudHNba2V5XTtcbiAgICAgICAgaWYgKGNicykge1xuICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgIF8uc2xpY2UuY2FsbChjYnMsIDApIDpcbiAgICAgICAgICAgICAgICBjYnM7XG4gICAgICAgICAgICBmb3IgKHZhciBsID0gY2JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGNic1tpXS5hcHBseSh0YXJnZXQsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGVtaXQgcGFyZW50XG4gICAgICAgIC8vIHByZXZlbnQgZGF0YTogZXZlbnQgYW5kIGhvb2s6IGV2ZW50IHRyaWdnZXJcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKCdkYXRhOicpICYmIGtleS5pbmRleE9mKCdob29rOicpICYmIGtleS5pbmRleE9mKCdkZWVwOicpICYmIHRoaXMuJHBhcmVudCkge1xuICAgICAgICAgICAgZW1pdC5jYWxsKHRoaXMuJHBhcmVudCwga2V5LCBhcmdzLCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxuIFxuICAgIGZ1bmN0aW9uIGNhbGxDaGFuZ2Uoa2V5LCBhcmdzKSB7XG4gICAgICAgIHZhciBzZWxmID0ge1xuICAgICAgICAgICAgX2V2ZW50czogdGhpcy5fd2F0Y2hlcnNcbiAgICAgICAgfTtcbiAgICAgICAgZW1pdC5jYWxsKHNlbGYsIGtleSwgYXJncyk7XG4gICAgICAgIGVtaXQuY2FsbChzZWxmLCBrZXkgKyAnKipkZWVwKionLCBhcmdzKTtcbiAgICB9XG4gXG4gICAgZnVuY3Rpb24gY2FsbERlZXAoa2V5LCBhcmdzKSB7XG4gICAgICAgIHZhciBwcm9wcywgbkFyZ3MsXG4gICAgICAgICAgICBrZXlzID0ga2V5LnNwbGl0KCcuJyksXG4gICAgICAgICAgICBzZWxmID0geyBfZXZlbnRzOiB0aGlzLl93YXRjaGVycyB9O1xuIFxuICAgICAgICBmb3IgKGtleXMucG9wKCk7IGtleXMubGVuZ3RoID4gMDsga2V5cy5wb3AoKSkge1xuICAgICAgICAgICAga2V5ID0ga2V5cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBwcm9wcyA9IGtleSArICcqKmRlZXAqKic7XG4gICAgICAgICAgICAvLyByZW1vdmUgdGhlIG9sZCB2YWx1ZVxuICAgICAgICAgICAgZW1pdC5jYWxsKHNlbGYsIHByb3BzLCBbdGhpcy5kYXRhKGtleSldKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbWl0IHZtIGlzIGNoYW5nZVxuICAgICAgICBlbWl0LmNhbGwoc2VsZiwgJyoqZGVlcCoqJywgW3RoaXNdKTtcbiAgICB9XG4gXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIGVtaXQ6IGVtaXQsXG4gICAgICAgIGNhbGxDaGFuZ2U6IGNhbGxDaGFuZ2UsXG4gICAgICAgIGNhbGxEZWVwOiBjYWxsRGVlcFxuICAgIH07XG4gXG4gXG4vKioqLyB9LFxuLyogNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gXG4gICAgdmFyIF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuIFxuICAgIHZhciBzdHJhdHMgPSB7fTtcbiAgICBzdHJhdHMuY3JlYXRlZCA9XG4gICAgc3RyYXRzLnJlYWR5ID1cbiAgICBzdHJhdHMuYXR0YWNoZWQgPVxuICAgIHN0cmF0cy5kZXRhY2hlZCA9XG4gICAgc3RyYXRzLmNvbXBpbGVkID1cbiAgICBzdHJhdHMuYmVmb3JlRGVzdHJveSA9XG4gICAgc3RyYXRzLmRlc3Ryb3llZCA9XG4gICAgc3RyYXRzLnBhcmFtQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgICAgIHJldHVybiBjaGlsZFZhbCA/XG4gICAgICAgICAgICBwYXJlbnRWYWwgP1xuICAgICAgICAgICAgICAgIHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpIDpcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShjaGlsZFZhbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRWYWwgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGlsZFZhbF0gOlxuICAgICAgICAgICAgcGFyZW50VmFsO1xuICAgIH07XG4gICAgc3RyYXRzLmRhdGEgPVxuICAgIHN0cmF0cy5maWx0ZXJzID1cbiAgICBzdHJhdHMubWV0aG9kcyA9XG4gICAgc3RyYXRzLmRpcmVjdGl2ZXMgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkge1xuICAgICAgaWYgKCFjaGlsZFZhbCkgcmV0dXJuIHBhcmVudFZhbDtcbiAgICAgIGlmICghcGFyZW50VmFsKSByZXR1cm4gY2hpbGRWYWw7XG4gICAgICByZXR1cm4gXy5leHRlbmQoe30sIHBhcmVudFZhbCwgY2hpbGRWYWwpO1xuICAgIH07XG4gXG4gICAgdmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgICAgIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHBhcmVudFZhbCA6XG4gICAgICAgICAgICBjaGlsZFZhbDtcbiAgICB9O1xuIFxuICAgIC8qKlxuICAgICAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAgICAgKiBob3cgdG8gbWVyZ2UgYSBwYXJlbnQgb3B0aW9uIHZhbHVlIGFuZCBhIGNoaWxkIG9wdGlvblxuICAgICAqIHZhbHVlIGludG8gdGhlIGZpbmFsIHZhbHVlLlxuICAgICAqXG4gICAgICogQWxsIHN0cmF0ZWd5IGZ1bmN0aW9ucyBmb2xsb3cgdGhlIHNhbWUgc2lnbmF0dXJlOlxuICAgICAqXG4gICAgICogQHBhcmFtIHsqfSBwYXJlbnRWYWxcbiAgICAgKiBAcGFyYW0geyp9IGNoaWxkVmFsXG4gICAgICogQHBhcmFtIHtWdWV9IFt2bV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZCwgdm0pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7fSwga2V5O1xuICAgICAgICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICAgICAgICAgIG1lcmdlKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChrZXkgaW4gY2hpbGQpIHtcbiAgICAgICAgICAgIGlmICghKHBhcmVudC5oYXNPd25Qcm9wZXJ0eShrZXkpKSkge1xuICAgICAgICAgICAgICAgIG1lcmdlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWVyZ2Uoa2V5KSB7XG4gICAgICAgICAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgICAgICAgICBvcHRpb25zW2tleV0gPSBzdHJhdChwYXJlbnRba2V5XSwgY2hpbGRba2V5XSwgdm0sIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuIFxuICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBzdHJhdHM6IHN0cmF0cyxcbiAgICAgICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnNcbiAgICB9XG4gXG4gXG4vKioqLyB9LFxuLyogOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gXG4gICAgLy8gTW9kdWxlcyBtYXBcbiAgICB2YXIgbW9kdWxlcyA9IHt9LFxuICAgICAgICBtZXJnZU9wdGlvbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLm1lcmdlT3B0aW9ucyxcbiAgICAgICAgbGlzdGVuZXJzID0ge307XG4gXG4gICAgZnVuY3Rpb24gX2RlZmluZShuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChtb2R1bGVzW25hbWVdKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBtb2R1bGUgPSBtb2R1bGVzW25hbWVdID0gdGhpcy5leHRlbmQob3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuIFxuICAgIGZ1bmN0aW9uIF9yZXF1aXJlKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBtb2R1bGVzW25hbWVdIHx8IHRoaXM7XG4gICAgfVxuIFxuICAgIGZ1bmN0aW9uIF9jcmVhdGUobykge1xuICAgICAgICBmdW5jdGlvbiBGKCkge31cbiAgICAgICAgRi5wcm90b3R5cGUgPSBvO1xuICAgICAgICByZXR1cm4gbmV3IEYoKTtcbiAgICB9XG4gXG4gICAgZnVuY3Rpb24gX2V4dGVuZChleHRlbmRPcHRpb25zKSB7XG4gICAgICAgIGV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zIHx8IHt9O1xuICAgICAgICB2YXIgU3VwZXIgPSB0aGlzLFxuICAgICAgICAgICAgU3ViID0gY3JlYXRlQ2xhc3MoZXh0ZW5kT3B0aW9ucy5uYW1lIHx8ICdRQ29tcG9uZW50Jyk7XG4gICAgICAgIFN1Yi5wcm90b3R5cGUgPSBfY3JlYXRlKFN1cGVyLnByb3RvdHlwZSk7XG4gICAgICAgIFN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdWI7XG4gICAgICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgICAgICAgU3VwZXIub3B0aW9ucyxcbiAgICAgICAgICAgIGV4dGVuZE9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgU3ViWydzdXBlciddID0gU3VwZXI7XG4gICAgICAgIFsnZXh0ZW5kJywgJ2dldCcsICdhbGwnLCAncmVxdWlyZScsICdkZWZpbmUnXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIFN1YltrZXldID0gU3VwZXJba2V5XTtcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIFN1YjtcbiAgICB9XG4gXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2xhc3MgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihcbiAgICAgICAgICAgICdyZXR1cm4gZnVuY3Rpb24gJyArIG5hbWUgK1xuICAgICAgICAgICAgJyAob3B0aW9ucykgeyB0aGlzLl9pbml0KG9wdGlvbnMpIH0nXG4gICAgICAgICkoKTtcbiAgICB9XG4gXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBkZWZpbmVcbiAgICAgICAgICogZGVmaW5lIGEgY29tcG9uZW50XG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBkZWZpbmU6IF9kZWZpbmUsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXF1aXJlXG4gICAgICAgICAqIHJlcXVpcmUobmFtZSlcbiAgICAgICAgICogcmVxdWlyZShuYW1lcywgY2FsbGJhY2spXG4gICAgICAgICAqIHJlcXVpcmUgYSBjb21wb25lbnRcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gbmFtZXNcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgICAgICovXG4gICAgICAgIHJlcXVpcmU6IF9yZXF1aXJlLFxuICAgICAgICAvKipcbiAgICAgICAgICogZXh0ZW5kXG4gICAgICAgICAqIGV4dGVuZCB0aGUgY2xhc3NcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGV4dGVuZDogX2V4dGVuZFxuICAgIH07XG4gXG4gXG4vKioqLyB9LFxuLyogOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gXG4gICAgdmFyIF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpLFxuICAgICAgICBzdHJhdHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuIFxuICAgIHZhciBQUk9QX1JFRyA9IC9eKC4qKVxcLihbXFx3XFwtXSspJC9cbiBcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgY2xvYWs6IHtcbiAgICAgICAgICAgIGJpbmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdm0gPSB0aGlzLnZtLFxuICAgICAgICAgICAgICAgICAgICBlbCA9IHRoaXMuZWw7XG4gXG4gICAgICAgICAgICAgICAgLy8gYWZ0ZXIgcmVhZHlcbiAgICAgICAgICAgICAgICB2bS4kb25jZSgnaG9vazpyZWFkeScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZGF0YSBjaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgdm0uJG9uY2UoJ2RhdGFjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3EtY2xvYWsnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNob3c6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgICAgICAgICAgICB2YXIgZGlzcGxheSA9IGVsLmN1cnJlbnRTdHlsZSA/XG4gICAgICAgICAgICAgICAgICAgIGVsLmN1cnJlbnRTdHlsZS5kaXNwbGF5IDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpLmRpc3BsYXk7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdjbGFzcyc6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbCxcbiAgICAgICAgICAgICAgICBhcmcgPSB0aGlzLmFyZztcbiAgICAgICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA/XG4gICAgICAgICAgICAgICAgICAgIF8uYWRkQ2xhc3MoZWwsIGFyZykgOlxuICAgICAgICAgICAgICAgICAgICBfLnJlbW92ZUNsYXNzKGVsLCBhcmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXN0VmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIF8ucmVtb3ZlQ2xhc3MoZWwsIHRoaXMubGFzdFZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfLmFkZENsYXNzKGVsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFZhbCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5lbDtcbiAgICAgICAgICAgIGlmIChlbC50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgZWwuY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhdHRyOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgYXJnID0gdGhpcy5hcmcsXG4gICAgICAgICAgICAgICAgZWwgPSB0aGlzLmVsO1xuICAgICAgICAgICAgLy8gcHJvcGVydHlcbiAgICAgICAgICAgIGlmIChhcmcgPT09ICdzdHlsZScpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZVtrXSA9IHZhbHVlW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKGFyZywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZyBpbiBlbCkge1xuICAgICAgICAgICAgICAgICAgICBlbFthcmddID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKGFyZywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgdGV4dDtcbiBcbiAgICAgICAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAodGV4dCA9ICh0eXBlb2YgdGhpcy5lbC50ZXh0Q29udGVudCA9PT0gJ3N0cmluZycpID9cbiAgICAgICAgICAgICAgICAgICAgJ3RleHRDb250ZW50JyA6ICdpbm5lclRleHQnKSAmJlxuICAgICAgICAgICAgICAgICAgICAodGhpcy5lbFt0ZXh0XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9PSBudWxsID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGh0bWw6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmVsLmlubmVySFRNTCA9IHZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKCkgfHwgJyc7XG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgICBiaW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSB0aGlzLnBhcmFtLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzID0gdGhpcy5maWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICB2bSA9IHRoaXMudm0sXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSB2bS5hcHBseUZpbHRlcnModGhpcy52bVtrZXldLCBmaWx0ZXJzKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBhcmFtICYmICh+cGFyYW0uaW5kZXhPZigndGhpcycpKSAmJiBzZWxmLmRhdGEoKTtcbiAgICAgICAgICAgICAgICBfLmFkZCh0aGlzLmVsLCB0aGlzLmFyZywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy53YXJuKCdZb3UgbmVlZCBpbXBsZW1lbnQgdGhlICcgKyBrZXkgKyAnIG1ldGhvZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5mb3JFYWNoKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnID09PSAnZScpIGFyZ3MucHVzaChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmcgPT09ICd0aGlzJykgYXJncy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZyA9PT0gJ3RydWUnKSBhcmdzLnB1c2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJnID09PSAnZmFsc2UnKSBhcmdzLnB1c2goZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCthcmcgKyAnJyA9PT0gYXJnKSBhcmdzLnB1c2goK2FyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eKFsnXCJdKS4qXFwxJC8pKSBhcmdzLnB1c2goYXJnLnNsaWNlKDEsIC0xKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBhcmdzLnB1c2goc2VsZi5kYXRhKGFyZykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGUpO1xuIFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmFwcGx5KHZtLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgIGJpbmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5cyA9ICgodGhpcy5uYW1lc3BhY2UgPyB0aGlzLm5hbWVzcGFjZSArICcuJyA6ICcnKSArIHRoaXMudGFyZ2V0KS5zcGxpdCgnLicpLFxuICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzLnBvcCgpLFxuICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBrZXlzLmpvaW4oJy4nKSxcbiAgICAgICAgICAgICAgICAgICAgZWwgPSB0aGlzLmVsLFxuICAgICAgICAgICAgICAgICAgICB2bSA9IHRoaXMudm0sXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSB2bS5kYXRhKG5hbWVzcGFjZSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIF8uYWRkKGVsLCAnaW5wdXQgcHJvcGVydHljaGFuZ2UgY2hhbmdlIGtleXByZXNzIGtleXVwJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvc2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLiRzZXQoa2V5LCBlbC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgXy5hZGQoZWwsICdjb21wb3NpdGlvbnN0YXJ0JywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBfLmFkZChlbCwgJ2NvbXBvc2l0aW9uZW5kJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbC52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdm06IHtcbiAgICAgICAgICAgIGJpbmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvLyBzdG9wIHdhbGtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuc3RvcCA9IHRydWU7XG4gXG4gICAgICAgICAgICAgICAgLy8gd2hpY2ggY29tcG9uZW50XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgdm0gPSB0aGlzLnZtLFxuICAgICAgICAgICAgICAgICAgICBlbCA9IHRoaXMuZWwsXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbXBvbmVudCByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgICAgcmVmID0gZWwuZ2V0QXR0cmlidXRlKCdxLXJlZicpIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBDaGlsZCA9IHZtLmNvbnN0cnVjdG9yLnJlcXVpcmUobmFtZSksXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBDaGlsZC5vcHRpb25zLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVm07XG4gXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZWw6IGVsLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBfcGFyZW50OiB2bVxuICAgICAgICAgICAgICAgIH07XG4gXG4gICAgICAgICAgICAgICAgY2hpbGRWbSA9IG5ldyBDaGlsZChvcHRpb25zKTtcbiBcbiAgICAgICAgICAgICAgICB2bS5fY2hpbGRyZW4ucHVzaChjaGlsZFZtKTtcbiAgICAgICAgICAgICAgICByZWYgJiYgIWZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZnMgPSB2bS4kW3JlZl07XG4gICAgICAgICAgICAgICAgICAgIHJlZnMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcy5sZW5ndGggP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWZzLnB1c2goY2hpbGRWbSkpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm0uJFtyZWZdID0gW3JlZnMsIGNoaWxkVm1dKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAodm0uJFtyZWZdID0gY2hpbGRWbSk7XG4gICAgICAgICAgICAgICAgfSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnaWYnOiB7XG4gICAgICAgICAgICBiaW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGlmIGVsIGlzIGEgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZWwucGFyZW50Tm9kZSkgcmV0dXJuO1xuIFxuICAgICAgICAgICAgICAgIHZhciB0cGwgPSB0aGlzLmVsLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gdHBsLnBhcmVudE5vZGUsXG4gICAgICAgICAgICAgICAgICAgIHJlZiA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJ3EtaWYnKSxcbiAgICAgICAgICAgICAgICAgICAgaGFzSW5pdCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBleGlzdCA9IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gXy5nZXQobmFtZXNwYWNlLCBrZXkpLFxuICAgICAgICAgICAgICAgICAgICByZWFkRmlsdGVycyA9IHRoaXMuZmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLFxuICAgICAgICAgICAgICAgICAgICB2bSA9IHRoaXMudm07XG4gXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnN0b3AgPSB0cnVlO1xuIFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbml0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIGV4aXN0IG5vIGJpbmRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0luaXQgfHwgIWV4aXN0IHx8ICF2YWx1ZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBoYXNJbml0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdm0uX3RlbXBsYXRlQmluZCh0cGwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gXG4gICAgICAgICAgICAgICAgdm0uJHdhdGNoKHRhcmdldCwgZnVuY3Rpb24gKHZhbHVlLCBvbGRWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2bS5hcHBseUZpbHRlcnModmFsdWUsIHJlYWRGaWx0ZXJzLCBvbGRWYWwpO1xuIFxuICAgICAgICAgICAgICAgICAgICBfaW5pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gaW5pdFxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IGV4aXN0KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbmRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0cGwsIHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAvLyB1bmJpbmRcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHJlZiwgdHBsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiBcbiAgICAgICAgICAgICAgICAgICAgX2luaXQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sIHR5cGVvZiB0aGlzLmRhdGEoa2V5KSA9PT0gJ29iamVjdCcsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbDoge1xuICAgICAgICAgICAgYmluZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMudm0uJCRbdGhpcy50YXJnZXRdID0gdGhpcy5lbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVwZWF0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuICAgIH07XG4gXG4gXG4vKioqLyB9LFxuLyogMTAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuIFxuICAgIHZhciBfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbiAgICAgICAgdmFyIG1ldGhvZHMgPSB7XG4gICAgICAgICAgICAnZGVmYXVsdCc6IHtcbiAgICAgICAgICAgICAgICAvLyBob3cgdG8gY2xlYW4gdGhlIGRvbVxuICAgICAgICAgICAgICAgIGNsZWFuOiBmdW5jdGlvbiAocGFyZW50Tm9kZSwgcmVwZWF0cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVwZWF0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdHMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGVhdCBlbGVtZW50IG1heSBoYXMgYmVlbiByZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudE5vZGUgPT09IHBhcmVudE5vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgXy5jbGVhbkRhdGEocmVwZWF0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGluc2VydDogZnVuY3Rpb24gKHBhcmVudE5vZGUsIGZyYWdtZW50LCByZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIHJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHB1c2g6IHtcbiAgICAgICAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBmcmFnbWVudCwgcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZyYWdtZW50LCByZWYpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZHA6IGZ1bmN0aW9uIChkYXRhLCBwYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0Y2gucmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzcGxpY2U6IHtcbiAgICAgICAgICAgICAgICBjbGVhbjogZnVuY3Rpb24gKHBhcmVudE5vZGUsIHJlcGVhdHMsIHZhbHVlLCB3YXRjaGVycykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHZhbHVlWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHZhbHVlWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdmFsdWVbMl0uJG5hbWVzcGFjZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlcyA9IHJlcGVhdHMuc3BsaWNlKGksIGwpO1xuICAgICAgICAgICAgICAgICAgICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBzcGxpY2Ugb25lIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2Uod2F0Y2hlcnMsIHRhcmdldCwgaSwgbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRwOiBmdW5jdGlvbiAoZGF0YSwgcGF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2guYXJncy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0Y2guYXJncztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gXG4gXG4gICAgZnVuY3Rpb24gc3BsaWNlKHdhdGNoZXJzLCB0YXJnZXQsIGksIGwpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRhcmdldC5sZW5ndGgsXG4gICAgICAgICAgICBzdWJLZXksXG4gICAgICAgICAgICBjdXIsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIG5ld0tleTtcbiAgICAgICAgT2JqZWN0LmtleXMod2F0Y2hlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKH5rZXkuaW5kZXhPZih0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgc3ViS2V5ID0ga2V5LnN1YnN0cmluZyhsZW5ndGggKyAxKTtcbiAgICAgICAgICAgICAgICBjdXIgPSBzdWJLZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAoY3VyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9ICtjdXIuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpbmRleCAtPSBsKSA+PSBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXIudW5zaGlmdChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXIudW5zaGlmdCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3S2V5ID0gY3VyLmpvaW4oJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhdGNoZXJzW25ld0tleV0gPSB3YXRjaGVyc1trZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHdhdGNoZXJzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiBcbiAgICBleHBvcnRzLmJpbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0cGwgPSB0aGlzLmVsLFxuICAgICAgICAgICAgc2V0dGluZyA9IHRoaXMuc2V0dGluZyxcbiAgICAgICAgICAgIHBhcmVudE5vZGUgPSB0cGwucGFyZW50Tm9kZSxcbiAgICAgICAgICAgIGtleSwgbmFtZXNwYWNlLCB0YXJnZXQsIHJlYWRGaWx0ZXJzLCByZXBlYXRzLCByZWYsIHZtO1xuICAgICAgICAvLyByZXR1cm5cbiAgICAgICAgaWYgKCFwYXJlbnROb2RlIHx8IHNldHRpbmcuc3RvcCkgcmV0dXJuO1xuIFxuICAgICAgICAvLyBzdG9wIGJpbmRpbmdcbiAgICAgICAgc2V0dGluZy5zdG9wID0gdHJ1ZTtcbiBcbiAgICAgICAga2V5ID0gdGhpcy50YXJnZXQ7XG4gICAgICAgIG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlO1xuICAgICAgICB0YXJnZXQgPSBfLmdldChuYW1lc3BhY2UsIGtleSk7XG4gICAgICAgIHJlYWRGaWx0ZXJzID0gdGhpcy5maWx0ZXJzO1xuICAgICAgICByZXBlYXRzID0gW107XG4gICAgICAgIHJlZiA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJ3EtcmVwZWF0Jyk7XG4gICAgICAgIHZtID0gdGhpcy52bTtcbiBcbiAgICAgICAgcGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocmVmLCB0cGwpO1xuIFxuICAgICAgICB2bS4kd2F0Y2godGFyZ2V0LCBmdW5jdGlvbiAodmFsdWUsIG9sZFZhbCwgcGF0Y2gpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdm0uYXBwbHlGaWx0ZXJzKHZhbHVlLCByZWFkRmlsdGVycyk7XG4gICAgICAgICAgICAvLyBpZiB2YWx1ZSBpcyB1bmRlZmluZWQgb3IgbnVsbCBqdXN0IHJldHVyblxuICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIHZhciBtZXRob2QgPSAoIXJlYWRGaWx0ZXJzLmxlbmd0aCAmJiBwYXRjaCkgPyBwYXRjaC5tZXRob2QgOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgZHAgPSAobWV0aG9kc1ttZXRob2RdIHx8IHt9KS5kcCxcbiAgICAgICAgICAgICAgICBjbGVhbiA9IChtZXRob2RzW21ldGhvZF0gfHwge30pLmNsZWFuLFxuICAgICAgICAgICAgICAgIGluc2VydCA9IChtZXRob2RzW21ldGhvZF0gfHwge30pLmluc2VydDtcbiBcbiAgICAgICAgICAgIC8vIGlmIGRwIGV4aXN0cywgcHJvY2Vlc3MgZGF0YVxuICAgICAgICAgICAgZHAgJiYgKHZhbHVlID0gZHAodmFsdWUsIHBhdGNoKSk7XG4gXG4gICAgICAgICAgICBpZiAoY2xlYW4gJiYgY2xlYW4ocGFyZW50Tm9kZSwgcmVwZWF0cywgdmFsdWUsIHZtLl93YXRjaGVycywgdGFyZ2V0KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiBcbiAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcbiAgICAgICAgICAgICAgICBpdGVtTm9kZTtcbiBcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKG9iaiwgaSkge1xuICAgICAgICAgICAgICAgIGl0ZW1Ob2RlID0gXy5jbG9uZSh0cGwpO1xuICAgICAgICAgICAgICAgIHZtLl90ZW1wbGF0ZUJpbmQoaXRlbU5vZGUsIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogb2JqLFxuICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG9iai4kbmFtZXNwYWNlKCksXG4gICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gdGhpcyBtdXN0IHJlZmFjdG9yXG4gICAgICAgICAgICAgICAgcmVwZWF0cy5wdXNoKGl0ZW1Ob2RlKTtcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChpdGVtTm9kZSk7XG4gICAgICAgICAgICB9KTtcbiBcbiAgICAgICAgICAgIGluc2VydCAmJiBpbnNlcnQocGFyZW50Tm9kZSwgZnJhZ21lbnQsIHJlZik7XG4gICAgICAgICAgICB2bS4kZW1pdCgncmVwZWF0LXJlbmRlcicpO1xuICAgICAgICB9LCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuIFxuIFxuLyoqKi8gfSxcbi8qIDExICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiBcbiAgICB2YXIgcGFyc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKSxcbiAgICAgICAgXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4gXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gXG4gICAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgICAgIGRpcmVjdGl2ZXMgPSBzZWxmLiRvcHRpb25zLmRpcmVjdGl2ZXMsXG4gICAgICAgICAgICBpbmRleCA9IG9wdGlvbnMuaW5kZXgsXG4gICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5kYXRhIHx8IHNlbGYsXG4gICAgICAgICAgICBuYW1lc3BhY2UgPSBvcHRpb25zLm5hbWVzcGFjZTtcbiBcbiAgICAgICAgXy53YWxrKFtlbF0sIGZ1bmN0aW9uIChub2RlLCByZXMsIHNldHRpbmcpIHtcbiAgICAgICAgICAgIHJlcy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG9iai5uYW1lLnN1YnN0cmluZygyKSxcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlID0gZGlyZWN0aXZlc1tuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcnMgPSBwYXJzZShvYmoudmFsdWUpO1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSAmJlxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZEZpbHRlcnMgPSBzZWxmLl9tYWtlUmVhZEZpbHRlcnMoZGVzY3JpcHRvci5maWx0ZXJzLCBzZWxmLmRhdGEobmFtZXNwYWNlKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gZGVzY3JpcHRvci50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gXy5nZXQobmFtZXNwYWNlLCBrZXkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZSA9IF8uaXNPYmplY3QoZGlyZWN0aXZlKSA/IGRpcmVjdGl2ZS51cGRhdGUgOiBkaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCA9IF8uZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWw6IG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtOiBzZWxmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kYXRhKF8uZ2V0KG5hbWVzcGFjZSwga2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nOiBzZXR0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZGVzY3JpcHRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiByZWFkRmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRoYXQuZGF0YShrZXkpO1xuIFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlICYmIHNlbGYuJHdhdGNoKHRhcmdldCwgZnVuY3Rpb24gKHZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5hcHBseUZpbHRlcnModmFsdWUsIHJlYWRGaWx0ZXJzLCBvbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlLmNhbGwodGhhdCwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHR5cGVvZiB0bXAgPT09ICdvYmplY3QnLCBfLmFscGFjYSA/IGZhbHNlIDogdHlwZW9mIG9wdGlvbnMuaW1tZWRpYXRlID09PSAnYm9vbGVhbicgPyBvcHRpb25zLmltbWVkaWF0ZSA6ICh0bXAgIT09IHVuZGVmaW5lZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNPYmplY3QoZGlyZWN0aXZlKSAmJiBkaXJlY3RpdmUuYmluZCkgZGlyZWN0aXZlLmJpbmQuY2FsbCh0aGF0KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiBcbiBcbi8qKiovIH0sXG4vKiAxMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gXG4gICAgdmFyIGNhY2hlID0gbmV3IChfX3dlYnBhY2tfcmVxdWlyZV9fKDIpKSgxMDAwKSxcbiAgICAgICAgdG9rZW5zID0gW1xuICAgICAgICAgICAgLy8gc3BhY2VcbiAgICAgICAgICAgIFsvXiArL10sXG4gICAgICAgICAgICAvLyBhcmdcbiAgICAgICAgICAgIFsvXihbXFx3XFwtXSspOi8sIGZ1bmN0aW9uIChjYXB0dXJlcywgc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnRva2VuLmFyZyA9IGNhcHR1cmVzWzFdO1xuICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAvLyBmdW5jdGlvblxuICAgICAgICAgICAgWy9eKFtcXHddKylcXCgoLis/KVxcKS8sIGZ1bmN0aW9uIChjYXB0dXJlcywgc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnRva2VuLnRhcmdldCA9IGNhcHR1cmVzWzFdO1xuICAgICAgICAgICAgICAgIHN0YXR1cy50b2tlbi5wYXJhbSA9IGNhcHR1cmVzWzJdLnNwbGl0KC8gKiwgKi8pO1xuICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAvLyB0YXJnZXRcbiAgICAgICAgICAgIFsvXihbXFx3XFwtXFwuXFwkXSspLywgZnVuY3Rpb24gKGNhcHR1cmVzLCBzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMudG9rZW4udGFyZ2V0ID0gY2FwdHVyZXNbMV07XG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIC8vIGZpbHRlclxuICAgICAgICAgICAgWy9eKD89XFx8KS8sIGZ1bmN0aW9uIChjYXB0dXJlcywgc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmZpbHRlciA9IHRydWU7XG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIC8vIG5leHRcbiAgICAgICAgICAgIFsvXiwvLCBmdW5jdGlvbiAoY2FwdHVyZXMsIHN0YXR1cywgcmVzKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goc3RhdHVzLnRva2VuKTtcbiAgICAgICAgICAgICAgICBzdGF0dXMudG9rZW4gPSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1dXG4gICAgICAgIF0sXG4gICAgICAgIGZpbHRlclJFRyA9IC9eKC4rPykoPz0sfCQpLyxcbiAgICAgICAgZmlsdGVyVG9rZW5zID0gW1xuICAgICAgICAgICAgLy8gc3BhY2VcbiAgICAgICAgICAgIFsvXiArL10sXG4gICAgICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgICAgIFsvXlxcfCAqKFtcXHdcXC1cXCFdKykvLCBmdW5jdGlvbiAoY2FwdHVyZXMsIGZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goW2NhcHR1cmVzWzFdXSk7XG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIC8vIHN0cmluZ1xuICAgICAgICAgICAgWy9eKFsnXCJdKSgoKFxcXFxbJ1wiXSk/KFteXFwxXSkqKSspXFwxLywgZnVuY3Rpb24gKGNhcHR1cmVzLCBmaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aCAtIDFdLnB1c2goY2FwdHVyZXNbM10pO1xuICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAvLyBhcmdcbiAgICAgICAgICAgIFsvXihbXFx3XFwtXFwkXSspLywgZnVuY3Rpb24gKGNhcHR1cmVzLCBmaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aCAtIDFdLnB1c2goY2FwdHVyZXNbMV0pO1xuICAgICAgICAgICAgfV1cbiAgICAgICAgXTtcbiAgICAvKipcbiAgICAgKiBjbGljazogb25jbGljayB8IGZpbHRlcjEgfCBmaWx0ZXIyXG4gICAgICogY2xpY2s6IG9uY2xpY2sgLCBrZXlkb3duOiBvbmtleWRvd25cbiAgICAgKiBjbGljazogb25jbGljayh0aGlzKVxuICAgICAqIGNsaWNrOiBvbmNsaWNrKGUsIHRoaXMpXG4gICAgICogdmFsdWUxIHwgZmlsdGVyMSB8IGZpbHRlcjJcbiAgICAgKiB2YWx1ZSAtIDEgfCBmaWx0ZXIxIHwgZmlsdGVyMiAgIGRvbid0IHN1cHBvcnRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBzdHIsXG4gICAgICAgICAgICBoaXQgPSBjYWNoZS5nZXQobmFtZSk7XG4gICAgICAgIGlmIChoaXQpIHJldHVybiBoaXQ7XG4gXG4gICAgICAgIHZhciByZXMgPSBbXSxcbiAgICAgICAgICAgIGNhcHR1cmVzLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGwgPSB0b2tlbnMubGVuZ3RoLFxuICAgICAgICAgICAgZm9vLFxuICAgICAgICAgICAgLy8gaWYgaGFzIHRva2VuIG9yIG5vdFxuICAgICAgICAgICAgaGFzID0gZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXMgPSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgaW4gZmlsdGVyIG9yIG5vdFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8ganVzdCB0b2tlbiBvYmplY3RcbiAgICAgICAgICAgICAgICB0b2tlbjoge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gXG4gICAgICAgIHdoaWxlIChzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhcHR1cmVzID0gdG9rZW5zW2ldWzBdLmV4ZWMoc3RyKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGFzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvbyA9IHRva2Vuc1tpXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZm9vICYmIGZvbyhjYXB0dXJlcywgc3RhdHVzLCByZXMpO1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSh0b2tlbnNbaV1bMF0sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVzID0gZmlsdGVyUkVHLmV4ZWMoc3RyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRmlsdGVyKGNhcHR1cmVzWzBdLnRyaW0oKSwgc3RhdHVzLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKGZpbHRlclJFRywgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmZpbHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXMpIHtcbiAgICAgICAgICAgICAgICBoYXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeW50YXggZXJyb3IgYXQ6ICcgKyBzdHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gXG4gICAgICAgIHJlcy5wdXNoKHN0YXR1cy50b2tlbik7XG4gICAgICAgIGNhY2hlLnB1dChuYW1lLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiBcbiAgICBmdW5jdGlvbiBwYXJzZUZpbHRlcihzdHIsIHRva2VuKSB7XG4gICAgICAgIHZhciBpLCBsID0gZmlsdGVyVG9rZW5zLmxlbmd0aCxcbiAgICAgICAgICAgIGhhcyA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAoc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgXHR2YXIgY2FwdHVyZXMgPSBmaWx0ZXJUb2tlbnNbaV1bMF0uZXhlYyhzdHIpO1xuICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGFzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvbyA9IGZpbHRlclRva2Vuc1tpXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZm9vICYmIGZvbyhjYXB0dXJlcywgdG9rZW4uZmlsdGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKGZpbHRlclRva2Vuc1tpXVswXSwgJycpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzKSB7XG4gICAgICAgICAgICAgICAgaGFzID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3ludGF4IGVycm9yIGF0OiAnICsgc3RyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiBcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHBhcnNlO1xuIFxuIFxuLyoqKi8gfVxuLyoqKioqKi8gXSlcbn0pO1xuO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NvdXJjZS1zcmMvanMvUS5qcyJdLCJzb3VyY2VSb290IjoiIn0=");
},function(module,exports){eval("'use strict';\n\nfunction init() {\n var width,\n height,\n largeHeader,\n canvas,\n ctx,\n circles,\n target,\n animateHeader = true;\n\n // Main\n initHeader();\n addListeners();\n\n function initHeader() {\n width = window.innerWidth;\n height = window.innerHeight;\n target = { x: 0, y: height };\n\n largeHeader = document.getElementById('container');\n largeHeader.style.height = height + 'px';\n\n canvas = document.getElementById('anm-canvas');\n canvas.width = width;\n canvas.height = height;\n ctx = canvas.getContext('2d');\n\n // create particles\n circles = [];\n for (var x = 0; x < width * 0.5; x++) {\n var c = new Circle();\n circles.push(c);\n }\n animate();\n }\n\n // Event handling\n function addListeners() {\n window.addEventListener('scroll', scrollCheck);\n window.addEventListener('resize', resize);\n }\n\n function scrollCheck() {\n if (document.body.scrollTop > height) animateHeader = false;else animateHeader = true;\n }\n\n function resize() {\n width = window.innerWidth;\n height = window.innerHeight;\n largeHeader.style.height = height + 'px';\n canvas.width = width;\n canvas.height = height;\n }\n\n function animate() {\n if (animateHeader) {\n ctx.clearRect(0, 0, width, height);\n for (var i in circles) {\n circles[i].draw();\n }\n }\n requestAnimationFrame(animate);\n }\n\n // Canvas manipulation\n function Circle() {\n var _this = this;\n\n // constructor\n (function () {\n _this.pos = {};\n init();\n //console.log(_this);\n })();\n\n function init() {\n _this.pos.x = Math.random() * width;\n _this.pos.y = height + Math.random() * 100;\n _this.alpha = 0.1 + Math.random() * 0.3;\n _this.scale = 0.1 + Math.random() * 0.3;\n _this.velocity = Math.random();\n }\n\n this.draw = function () {\n if (_this.alpha <= 0) {\n init();\n }\n _this.pos.y -= _this.velocity;\n _this.alpha -= 0.0005;\n ctx.beginPath();\n ctx.arc(_this.pos.x, _this.pos.y, _this.scale * 10, 0, 2 * Math.PI, false);\n ctx.fillStyle = 'rgba(255,255,255,' + _this.alpha + ')';\n ctx.fill();\n };\n }\n}\n\nmodule.exports = {\n init: init\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Utc3JjL2pzL2FubS5qcz84MDcyIl0sIm5hbWVzIjpbImluaXQiLCJ3aWR0aCIsImhlaWdodCIsImxhcmdlSGVhZGVyIiwiY2FudmFzIiwiY3R4IiwiY2lyY2xlcyIsInRhcmdldCIsImFuaW1hdGVIZWFkZXIiLCJpbml0SGVhZGVyIiwiYWRkTGlzdGVuZXJzIiwid2luZG93IiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0IiwieCIsInkiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwic3R5bGUiLCJnZXRDb250ZXh0IiwiYyIsIkNpcmNsZSIsInB1c2giLCJhbmltYXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNjcm9sbENoZWNrIiwicmVzaXplIiwiYm9keSIsInNjcm9sbFRvcCIsImNsZWFyUmVjdCIsImkiLCJkcmF3IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiX3RoaXMiLCJwb3MiLCJNYXRoIiwicmFuZG9tIiwiYWxwaGEiLCJzY2FsZSIsInZlbG9jaXR5IiwiYmVnaW5QYXRoIiwiYXJjIiwiUEkiLCJmaWxsU3R5bGUiLCJmaWxsIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFTQSxJQUFULEdBQWdCO0FBQ1osUUFBSUMsS0FBSjtBQUFBLFFBQVdDLE1BQVg7QUFBQSxRQUFtQkMsV0FBbkI7QUFBQSxRQUFnQ0MsTUFBaEM7QUFBQSxRQUF3Q0MsR0FBeEM7QUFBQSxRQUE2Q0MsT0FBN0M7QUFBQSxRQUFzREMsTUFBdEQ7QUFBQSxRQUE4REMsZ0JBQWdCLElBQTlFOztBQUVBO0FBQ0FDO0FBQ0FDOztBQUVBLGFBQVNELFVBQVQsR0FBc0I7QUFDbEJSLGdCQUFRVSxPQUFPQyxVQUFmO0FBQ0FWLGlCQUFTUyxPQUFPRSxXQUFoQjtBQUNBTixpQkFBUyxFQUFDTyxHQUFHLENBQUosRUFBT0MsR0FBR2IsTUFBVixFQUFUOztBQUVBQyxzQkFBY2EsU0FBU0MsY0FBVCxDQUF3QixXQUF4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Z0Isc0JBQXFCVixNQUFNSSxLQUEzQixHQUFpQyxHQUFqRDtBQUNBaEMsZ0JBQUl1QyxJQUFKO0FBQ0gsU0FWRDtBQVdIO0FBQ0o7O0FBR0RDLE9BQU9DLE9BQVAsR0FBaUI7QUFDYjlDLFVBQU1BO0FBRE8sQ0FBakIiLCJmaWxlIjoiNzMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciB3aWR0aCwgaGVpZ2h0LCBsYXJnZUhlYWRlciwgY2FudmFzLCBjdHgsIGNpcmNsZXMsIHRhcmdldCwgYW5pbWF0ZUhlYWRlciA9IHRydWU7XG5cbiAgICAvLyBNYWluXG4gICAgaW5pdEhlYWRlcigpO1xuICAgIGFkZExpc3RlbmVycygpO1xuXG4gICAgZnVuY3Rpb24gaW5pdEhlYWRlcigpIHtcbiAgICAgICAgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICB0YXJnZXQgPSB7eDogMCwgeTogaGVpZ2h0fTtcblxuICAgICAgICBsYXJnZUhlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTtcbiAgICAgICAgbGFyZ2VIZWFkZXIuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0KydweCc7XG5cbiAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FubS1jYW52YXMnKTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBwYXJ0aWNsZXNcbiAgICAgICAgY2lyY2xlcyA9IFtdO1xuICAgICAgICBmb3IodmFyIHggPSAwOyB4IDwgd2lkdGgqMC41OyB4KyspIHtcbiAgICAgICAgICAgIHZhciBjID0gbmV3IENpcmNsZSgpO1xuICAgICAgICAgICAgY2lyY2xlcy5wdXNoKGMpO1xuICAgICAgICB9XG4gICAgICAgIGFuaW1hdGUoKTtcbiAgICB9XG5cbiAgICAvLyBFdmVudCBoYW5kbGluZ1xuICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVycygpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNjcm9sbENoZWNrKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2Nyb2xsQ2hlY2soKSB7XG4gICAgICAgIGlmKGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID4gaGVpZ2h0KSBhbmltYXRlSGVhZGVyID0gZmFsc2U7XG4gICAgICAgIGVsc2UgYW5pbWF0ZUhlYWRlciA9IHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICAgIGxhcmdlSGVhZGVyLnN0eWxlLmhlaWdodCA9IGhlaWdodCsncHgnO1xuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhbmltYXRlKCkge1xuICAgICAgICBpZihhbmltYXRlSGVhZGVyKSB7XG4gICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsMCx3aWR0aCxoZWlnaHQpO1xuICAgICAgICAgICAgZm9yKHZhciBpIGluIGNpcmNsZXMpIHtcbiAgICAgICAgICAgICAgICBjaXJjbGVzW2ldLmRyYXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gICAgfVxuXG4gICAgLy8gQ2FudmFzIG1hbmlwdWxhdGlvblxuICAgIGZ1bmN0aW9uIENpcmNsZSgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBfdGhpcy5wb3MgPSB7fTtcbiAgICAgICAgICAgIGluaXQoKTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coX3RoaXMpO1xuICAgICAgICB9KSgpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgICAgICBfdGhpcy5wb3MueCA9IE1hdGgucmFuZG9tKCkqd2lkdGg7XG4gICAgICAgICAgICBfdGhpcy5wb3MueSA9IGhlaWdodCtNYXRoLnJhbmRvbSgpKjEwMDtcbiAgICAgICAgICAgIF90aGlzLmFscGhhID0gMC4xK01hdGgucmFuZG9tKCkqMC4zO1xuICAgICAgICAgICAgX3RoaXMuc2NhbGUgPSAwLjErTWF0aC5yYW5kb20oKSowLjM7XG4gICAgICAgICAgICBfdGhpcy52ZWxvY2l0eSA9IE1hdGgucmFuZG9tKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyYXcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmKF90aGlzLmFscGhhIDw9IDApIHtcbiAgICAgICAgICAgICAgICBpbml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5wb3MueSAtPSBfdGhpcy52ZWxvY2l0eTtcbiAgICAgICAgICAgIF90aGlzLmFscGhhIC09IDAuMDAwNTtcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGN0eC5hcmMoX3RoaXMucG9zLngsIF90aGlzLnBvcy55LCBfdGhpcy5zY2FsZSoxMCwgMCwgMiAqIE1hdGguUEksIGZhbHNlKTtcbiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAncmdiYSgyNTUsMjU1LDI1NSwnKyBfdGhpcy5hbHBoYSsnKSc7XG4gICAgICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICB9O1xuICAgIH1cbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBpbml0OiBpbml0XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc291cmNlLXNyYy9qcy9hbm0uanMiXSwic291cmNlUm9vdCI6IiJ9")},,,,,,,function(module,exports,__webpack_require__){eval('module.exports = { "default": __webpack_require__(82), __esModule: true };\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcz9mZTA2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtCQUFrQiIsImZpbGUiOiI4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5c1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanNcbi8vIG1vZHVsZSBpZCA9IDgwXG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3VyY2VSb290IjoiIn0=')},,function(module,exports,__webpack_require__){eval("__webpack_require__(84);\nmodule.exports = __webpack_require__(11).Object.keys;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5cy5qcz9jYzNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EiLCJmaWxlIjoiODIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmtleXM7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gODJcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(27)\n , core = __webpack_require__(11)\n , fails = __webpack_require__(8);\nmodule.exports = function(KEY, exec){\n var fn = (core.Object || {})[KEY] || Object[KEY]\n , exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzP2EwM2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0EsbURBQW1ELE9BQU8sRUFBRTtBQUM1RCIsImZpbGUiOiI4My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsIGNvcmUgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBmYWlscyAgID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oS0VZLCBleGVjKXtcbiAgdmFyIGZuICA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXVxuICAgICwgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24oKXsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzXG4vLyBtb2R1bGUgaWQgPSA4M1xuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(37)\n , $keys = __webpack_require__(9);\n\n__webpack_require__(83)('keys', function(){\n return function keys(it){\n return $keys(toObject(it));\n };\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcz9jOThmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpXG4gICwgJGtleXMgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbigpe1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCl7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSA4NFxuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("var require;/* WEBPACK VAR INJECTION */(function(process, global) {/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version 4.0.5\n */\n\n(function (global, factory) {\n true ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n return typeof x === 'function' || typeof x === 'object' && x !== null;\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\nvar _isArray = undefined;\nif (!Array.isArray) {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n} else {\n _isArray = Array.isArray;\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = undefined;\nvar customSchedulerFn = undefined;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var r = require;\n var vertx = __webpack_require__(95);\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = undefined;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && \"function\" === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var _arguments = arguments;\n\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n if (_state) {\n (function () {\n var callback = _arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n })();\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n _resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n try {\n return promise.then;\n } catch (error) {\n GET_THEN_ERROR.error = error;\n return GET_THEN_ERROR;\n }\n}\n\nfunction tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n _resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n _reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n _reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n _reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return _resolve(promise, value);\n }, function (reason) {\n return _reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$) {\n if (maybeThenable.constructor === promise.constructor && then$$ === then && maybeThenable.constructor.resolve === resolve) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$ === GET_THEN_ERROR) {\n _reject(promise, GET_THEN_ERROR.error);\n } else if (then$$ === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$)) {\n handleForeignThenable(promise, maybeThenable, then$$);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction _resolve(promise, value) {\n if (promise === value) {\n _reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction _reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = undefined,\n callback = undefined,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n this.error = null;\n}\n\nvar TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch (e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = undefined,\n error = undefined,\n succeeded = undefined,\n failed = undefined;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n _reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n _resolve(promise, value);\n } else if (failed) {\n _reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n _reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n _resolve(promise, value);\n }, function rejectPromise(reason) {\n _reject(promise, reason);\n });\n } catch (e) {\n _reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n _reject(this.promise, validationError());\n }\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n};\n\nEnumerator.prototype._enumerate = function () {\n var length = this.length;\n var _input = this._input;\n\n for (var i = 0; this._state === PENDING && i < length; i++) {\n this._eachEntry(_input[i], i);\n }\n};\n\nEnumerator.prototype._eachEntry = function (entry, i) {\n var c = this._instanceConstructor;\n var resolve$$ = c.resolve;\n\n if (resolve$$ === resolve) {\n var _then = getThen(entry);\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise) {\n var promise = new c(noop);\n handleMaybeThenable(promise, entry, _then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$) {\n return resolve$$(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$(entry), i);\n }\n};\n\nEnumerator.prototype._settledAt = function (state, i, value) {\n var promise = this.promise;\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n _reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n};\n\nEnumerator.prototype._willSettleAt = function (promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n};\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n _reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n*/\nfunction Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n}\n\nPromise.all = all;\nPromise.race = race;\nPromise.resolve = resolve;\nPromise.reject = reject;\nPromise._setScheduler = setScheduler;\nPromise._setAsap = setAsap;\nPromise._asap = asap;\n\nPromise.prototype = {\n constructor: Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n \n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n \n Chaining\n --------\n \n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n \n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n \n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n \n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n \n Assimilation\n ------------\n \n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n \n If the assimliated promise rejects, then the downstream promise will also reject.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n \n Simple Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let result;\n \n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n \n Advanced Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let author, books;\n \n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n \n function foundBooks(books) {\n \n }\n \n function failure(reason) {\n \n }\n \n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n \n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: then,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n \n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n \n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n \n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n \n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\nfunction polyfill() {\n var local = undefined;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise;\n}\n\n// Strange compat..\nPromise.polyfill = polyfill;\nPromise.Promise = Promise;\n\nreturn Promise;\n\n})));\n//# sourceMappingURL=es6-promise.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(93), (function() { return this; }())))\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2VzNi1wcm9taXNlL2Rpc3QvZXM2LXByb21pc2UuanM/Yzk5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiWUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMscUJBQXFCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpRkFBaUY7O0FBRWpGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHNCQUFzQjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxVQUFVLElBQUk7QUFDZDtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHdCQUF3QjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQix1Q0FBdUM7QUFDeEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxVQUFVLE1BQU07QUFDaEIsVUFBVSxPQUFPO0FBQ2pCO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFCQUFxQixZQUFZO0FBQ2pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxJQUFJO0FBQ2Q7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsVUFBVSxTQUFTO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLFlBQVksU0FBUztBQUNyQixZQUFZLFNBQVM7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQztBQUNELG9DIiwiZmlsZSI6Ijg1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAb3ZlcnZpZXcgZXM2LXByb21pc2UgLSBhIHRpbnkgaW1wbGVtZW50YXRpb24gb2YgUHJvbWlzZXMvQSsuXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNCBZZWh1ZGEgS2F0eiwgVG9tIERhbGUsIFN0ZWZhbiBQZW5uZXIgYW5kIGNvbnRyaWJ1dG9ycyAoQ29udmVyc2lvbiB0byBFUzYgQVBJIGJ5IEpha2UgQXJjaGliYWxkKVxuICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZVxuICogICAgICAgICAgICBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N0ZWZhbnBlbm5lci9lczYtcHJvbWlzZS9tYXN0ZXIvTElDRU5TRVxuICogQHZlcnNpb24gICA0LjAuNVxuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGdsb2JhbC5FUzZQcm9taXNlID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBvYmplY3RPckZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xufVxuXG52YXIgX2lzQXJyYXkgPSB1bmRlZmluZWQ7XG5pZiAoIUFycmF5LmlzQXJyYXkpIHtcbiAgX2lzQXJyYXkgPSBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG59IGVsc2Uge1xuICBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG59XG5cbnZhciBpc0FycmF5ID0gX2lzQXJyYXk7XG5cbnZhciBsZW4gPSAwO1xudmFyIHZlcnR4TmV4dCA9IHVuZGVmaW5lZDtcbnZhciBjdXN0b21TY2hlZHVsZXJGbiA9IHVuZGVmaW5lZDtcblxudmFyIGFzYXAgPSBmdW5jdGlvbiBhc2FwKGNhbGxiYWNrLCBhcmcpIHtcbiAgcXVldWVbbGVuXSA9IGNhbGxiYWNrO1xuICBxdWV1ZVtsZW4gKyAxXSA9IGFyZztcbiAgbGVuICs9IDI7XG4gIGlmIChsZW4gPT09IDIpIHtcbiAgICAvLyBJZiBsZW4gaXMgMiwgdGhhdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gc2NoZWR1bGUgYW4gYXN5bmMgZmx1c2guXG4gICAgLy8gSWYgYWRkaXRpb25hbCBjYWxsYmFja3MgYXJlIHF1ZXVlZCBiZWZvcmUgdGhlIHF1ZXVlIGlzIGZsdXNoZWQsIHRoZXlcbiAgICAvLyB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGlzIGZsdXNoIHRoYXQgd2UgYXJlIHNjaGVkdWxpbmcuXG4gICAgaWYgKGN1c3RvbVNjaGVkdWxlckZuKSB7XG4gICAgICBjdXN0b21TY2hlZHVsZXJGbihmbHVzaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlRmx1c2goKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNldFNjaGVkdWxlcihzY2hlZHVsZUZuKSB7XG4gIGN1c3RvbVNjaGVkdWxlckZuID0gc2NoZWR1bGVGbjtcbn1cblxuZnVuY3Rpb24gc2V0QXNhcChhc2FwRm4pIHtcbiAgYXNhcCA9IGFzYXBGbjtcbn1cblxudmFyIGJyb3dzZXJXaW5kb3cgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHVuZGVmaW5lZDtcbnZhciBicm93c2VyR2xvYmFsID0gYnJvd3NlcldpbmRvdyB8fCB7fTtcbnZhciBCcm93c2VyTXV0YXRpb25PYnNlcnZlciA9IGJyb3dzZXJHbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBicm93c2VyR2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgaXNOb2RlID0gdHlwZW9mIHNlbGYgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAoe30pLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJztcblxuLy8gdGVzdCBmb3Igd2ViIHdvcmtlciBidXQgbm90IGluIElFMTBcbnZhciBpc1dvcmtlciA9IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8vIG5vZGVcbmZ1bmN0aW9uIHVzZU5leHRUaWNrKCkge1xuICAvLyBub2RlIHZlcnNpb24gMC4xMC54IGRpc3BsYXlzIGEgZGVwcmVjYXRpb24gd2FybmluZyB3aGVuIG5leHRUaWNrIGlzIHVzZWQgcmVjdXJzaXZlbHlcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jdWpvanMvd2hlbi9pc3N1ZXMvNDEwIGZvciBkZXRhaWxzXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICB9O1xufVxuXG4vLyB2ZXJ0eFxuZnVuY3Rpb24gdXNlVmVydHhUaW1lcigpIHtcbiAgaWYgKHR5cGVvZiB2ZXJ0eE5leHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZlcnR4TmV4dChmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1c2VTZXRUaW1lb3V0KCk7XG59XG5cbmZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgdmFyIG9ic2VydmVyID0gbmV3IEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKGZsdXNoKTtcbiAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbm9kZS5kYXRhID0gaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDI7XG4gIH07XG59XG5cbi8vIHdlYiB3b3JrZXJcbmZ1bmN0aW9uIHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZsdXNoO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTZXRUaW1lb3V0KCkge1xuICAvLyBTdG9yZSBzZXRUaW1lb3V0IHJlZmVyZW5jZSBzbyBlczYtcHJvbWlzZSB3aWxsIGJlIHVuYWZmZWN0ZWQgYnlcbiAgLy8gb3RoZXIgY29kZSBtb2RpZnlpbmcgc2V0VGltZW91dCAobGlrZSBzaW5vbi51c2VGYWtlVGltZXJzKCkpXG4gIHZhciBnbG9iYWxTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2xvYmFsU2V0VGltZW91dChmbHVzaCwgMSk7XG4gIH07XG59XG5cbnZhciBxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbmZ1bmN0aW9uIGZsdXNoKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgdmFyIGFyZyA9IHF1ZXVlW2kgKyAxXTtcblxuICAgIGNhbGxiYWNrKGFyZyk7XG5cbiAgICBxdWV1ZVtpXSA9IHVuZGVmaW5lZDtcbiAgICBxdWV1ZVtpICsgMV0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0VmVydHgoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHIgPSByZXF1aXJlO1xuICAgIHZhciB2ZXJ0eCA9IHIoJ3ZlcnR4Jyk7XG4gICAgdmVydHhOZXh0ID0gdmVydHgucnVuT25Mb29wIHx8IHZlcnR4LnJ1bk9uQ29udGV4dDtcbiAgICByZXR1cm4gdXNlVmVydHhUaW1lcigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHVzZVNldFRpbWVvdXQoKTtcbiAgfVxufVxuXG52YXIgc2NoZWR1bGVGbHVzaCA9IHVuZGVmaW5lZDtcbi8vIERlY2lkZSB3aGF0IGFzeW5jIG1ldGhvZCB0byB1c2UgdG8gdHJpZ2dlcmluZyBwcm9jZXNzaW5nIG9mIHF1ZXVlZCBjYWxsYmFja3M6XG5pZiAoaXNOb2RlKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VOZXh0VGljaygpO1xufSBlbHNlIGlmIChCcm93c2VyTXV0YXRpb25PYnNlcnZlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTXV0YXRpb25PYnNlcnZlcigpO1xufSBlbHNlIGlmIChpc1dvcmtlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTWVzc2FnZUNoYW5uZWwoKTtcbn0gZWxzZSBpZiAoYnJvd3NlcldpbmRvdyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSBhdHRlbXB0VmVydHgoKTtcbn0gZWxzZSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VTZXRUaW1lb3V0KCk7XG59XG5cbmZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9hcmd1bWVudHMgPSBhcmd1bWVudHM7XG5cbiAgdmFyIHBhcmVudCA9IHRoaXM7XG5cbiAgdmFyIGNoaWxkID0gbmV3IHRoaXMuY29uc3RydWN0b3Iobm9vcCk7XG5cbiAgaWYgKGNoaWxkW1BST01JU0VfSURdID09PSB1bmRlZmluZWQpIHtcbiAgICBtYWtlUHJvbWlzZShjaGlsZCk7XG4gIH1cblxuICB2YXIgX3N0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuICBpZiAoX3N0YXRlKSB7XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjYWxsYmFjayA9IF9hcmd1bWVudHNbX3N0YXRlIC0gMV07XG4gICAgICBhc2FwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKF9zdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCBwYXJlbnQuX3Jlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gIH1cblxuICByZXR1cm4gY2hpbGQ7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZXNvbHZlYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgYmVjb21lIHJlc29sdmVkIHdpdGggdGhlXG4gIHBhc3NlZCBgdmFsdWVgLiBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVzb2x2ZSgxKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoMSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZXNvbHZlXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHZhbHVlIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgZnVsZmlsbGVkIHdpdGggdGhlIGdpdmVuXG4gIGB2YWx1ZWBcbiovXG5mdW5jdGlvbiByZXNvbHZlKG9iamVjdCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuXG4gIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3Jlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbnZhciBQUk9NSVNFX0lEID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDE2KTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnZhciBQRU5ESU5HID0gdm9pZCAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xuXG52YXIgR0VUX1RIRU5fRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gc2VsZkZ1bGZpbGxtZW50KCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG59XG5cbmZ1bmN0aW9uIGNhbm5vdFJldHVybk93bigpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGhlbihwcm9taXNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHByb21pc2UudGhlbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBHRVRfVEhFTl9FUlJPUi5lcnJvciA9IGVycm9yO1xuICAgIHJldHVybiBHRVRfVEhFTl9FUlJPUjtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICB0aGVuLmNhbGwodmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHtcbiAgYXNhcChmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICB2YXIgZXJyb3IgPSB0cnlUaGVuKHRoZW4sIHRoZW5hYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChzZWFsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VhbGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGVuYWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSwgJ1NldHRsZTogJyArIChwcm9taXNlLl9sYWJlbCB8fCAnIHVua25vd24gcHJvbWlzZScpKTtcblxuICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfVxuICB9LCBwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUpIHtcbiAgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gRlVMRklMTEVEKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0aGVuYWJsZS5fc3RhdGUgPT09IFJFSkVDVEVEKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICBzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpIHtcbiAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IgJiYgdGhlbiQkID09PSB0aGVuICYmIG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IucmVzb2x2ZSA9PT0gcmVzb2x2ZSkge1xuICAgIGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIGlmICh0aGVuJCQgPT09IEdFVF9USEVOX0VSUk9SKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIEdFVF9USEVOX0VSUk9SLmVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHRoZW4kJCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0aGVuJCQpKSB7XG4gICAgICBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbiQkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCBtYXliZVRoZW5hYmxlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpIHtcbiAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCBzZWxmRnVsZmlsbG1lbnQoKSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0T3JGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIHZhbHVlLCBnZXRUaGVuKHZhbHVlKSk7XG4gIH0gZWxzZSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gIGlmIChwcm9taXNlLl9vbmVycm9yKSB7XG4gICAgcHJvbWlzZS5fb25lcnJvcihwcm9taXNlLl9yZXN1bHQpO1xuICB9XG5cbiAgcHVibGlzaChwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fc3RhdGUgPSBGVUxGSUxMRUQ7XG5cbiAgaWYgKHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzYXAocHVibGlzaCwgcHJvbWlzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3JlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb21pc2UuX3N0YXRlID0gUkVKRUNURUQ7XG4gIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjtcblxuICBhc2FwKHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9zdWJzY3JpYmVycyA9IHBhcmVudC5fc3Vic2NyaWJlcnM7XG4gIHZhciBsZW5ndGggPSBfc3Vic2NyaWJlcnMubGVuZ3RoO1xuXG4gIHBhcmVudC5fb25lcnJvciA9IG51bGw7XG5cbiAgX3N1YnNjcmliZXJzW2xlbmd0aF0gPSBjaGlsZDtcbiAgX3N1YnNjcmliZXJzW2xlbmd0aCArIEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50O1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgUkVKRUNURURdID0gb25SZWplY3Rpb247XG5cbiAgaWYgKGxlbmd0aCA9PT0gMCAmJiBwYXJlbnQuX3N0YXRlKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwYXJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1Ymxpc2gocHJvbWlzZSkge1xuICB2YXIgc3Vic2NyaWJlcnMgPSBwcm9taXNlLl9zdWJzY3JpYmVycztcbiAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTtcblxuICBpZiAoc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNoaWxkID0gdW5kZWZpbmVkLFxuICAgICAgY2FsbGJhY2sgPSB1bmRlZmluZWQsXG4gICAgICBkZXRhaWwgPSBwcm9taXNlLl9yZXN1bHQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkgKz0gMykge1xuICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07XG4gICAgY2FsbGJhY2sgPSBzdWJzY3JpYmVyc1tpICsgc2V0dGxlZF07XG5cbiAgICBpZiAoY2hpbGQpIHtcbiAgICAgIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZGV0YWlsKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5ndGggPSAwO1xufVxuXG5mdW5jdGlvbiBFcnJvck9iamVjdCgpIHtcbiAgdGhpcy5lcnJvciA9IG51bGw7XG59XG5cbnZhciBUUllfQ0FUQ0hfRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCkge1xuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjayhkZXRhaWwpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgVFJZX0NBVENIX0VSUk9SLmVycm9yID0gZTtcbiAgICByZXR1cm4gVFJZX0NBVENIX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgdmFyIGhhc0NhbGxiYWNrID0gaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yID0gdW5kZWZpbmVkLFxuICAgICAgc3VjY2VlZGVkID0gdW5kZWZpbmVkLFxuICAgICAgZmFpbGVkID0gdW5kZWZpbmVkO1xuXG4gIGlmIChoYXNDYWxsYmFjaykge1xuICAgIHZhbHVlID0gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCk7XG5cbiAgICBpZiAodmFsdWUgPT09IFRSWV9DQVRDSF9FUlJPUikge1xuICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGNhbm5vdFJldHVybk93bigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBkZXRhaWw7XG4gICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIC8vIG5vb3BcbiAgfSBlbHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNjZWVkZWQpIHtcbiAgICAgIF9yZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGZhaWxlZCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBGVUxGSUxMRUQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVByb21pc2UocHJvbWlzZSwgcmVzb2x2ZXIpIHtcbiAgdHJ5IHtcbiAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIGUpO1xuICB9XG59XG5cbnZhciBpZCA9IDA7XG5mdW5jdGlvbiBuZXh0SWQoKSB7XG4gIHJldHVybiBpZCsrO1xufVxuXG5mdW5jdGlvbiBtYWtlUHJvbWlzZShwcm9taXNlKSB7XG4gIHByb21pc2VbUFJPTUlTRV9JRF0gPSBpZCsrO1xuICBwcm9taXNlLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9zdWJzY3JpYmVycyA9IFtdO1xufVxuXG5mdW5jdGlvbiBFbnVtZXJhdG9yKENvbnN0cnVjdG9yLCBpbnB1dCkge1xuICB0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoIXRoaXMucHJvbWlzZVtQUk9NSVNFX0lEXSkge1xuICAgIG1ha2VQcm9taXNlKHRoaXMucHJvbWlzZSk7XG4gIH1cblxuICBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMubGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIHRoaXMuX3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDtcblxuICAgIHRoaXMuX3Jlc3VsdCA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGZ1bGZpbGwodGhpcy5wcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDA7XG4gICAgICB0aGlzLl9lbnVtZXJhdGUoKTtcbiAgICAgIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIF9yZWplY3QodGhpcy5wcm9taXNlLCB2YWxpZGF0aW9uRXJyb3IoKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGlvbkVycm9yKCkge1xuICByZXR1cm4gbmV3IEVycm9yKCdBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXknKTtcbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgdmFyIF9pbnB1dCA9IHRoaXMuX2lucHV0O1xuXG4gIGZvciAodmFyIGkgPSAwOyB0aGlzLl9zdGF0ZSA9PT0gUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLl9lYWNoRW50cnkoX2lucHV0W2ldLCBpKTtcbiAgfVxufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VhY2hFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSwgaSkge1xuICB2YXIgYyA9IHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I7XG4gIHZhciByZXNvbHZlJCQgPSBjLnJlc29sdmU7XG5cbiAgaWYgKHJlc29sdmUkJCA9PT0gcmVzb2x2ZSkge1xuICAgIHZhciBfdGhlbiA9IGdldFRoZW4oZW50cnkpO1xuXG4gICAgaWYgKF90aGVuID09PSB0aGVuICYmIGVudHJ5Ll9zdGF0ZSAhPT0gUEVORElORykge1xuICAgICAgdGhpcy5fc2V0dGxlZEF0KGVudHJ5Ll9zdGF0ZSwgaSwgZW50cnkuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgX3RoZW4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuICAgICAgdGhpcy5fcmVzdWx0W2ldID0gZW50cnk7XG4gICAgfSBlbHNlIGlmIChjID09PSBQcm9taXNlKSB7XG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBjKG5vb3ApO1xuICAgICAgaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBlbnRyeSwgX3RoZW4pO1xuICAgICAgdGhpcy5fd2lsbFNldHRsZUF0KHByb21pc2UsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQobmV3IGMoZnVuY3Rpb24gKHJlc29sdmUkJCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSQkKGVudHJ5KTtcbiAgICAgIH0pLCBpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fd2lsbFNldHRsZUF0KHJlc29sdmUkJChlbnRyeSksIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fc2V0dGxlZEF0ID0gZnVuY3Rpb24gKHN0YXRlLCBpLCB2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcblxuICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICB0aGlzLl9yZW1haW5pbmctLTtcblxuICAgIGlmIChzdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0ID0gZnVuY3Rpb24gKHByb21pc2UsIGkpIHtcbiAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gIHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoRlVMRklMTEVELCBpLCB2YWx1ZSk7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4gZW51bWVyYXRvci5fc2V0dGxlZEF0KFJFSkVDVEVELCBpLCByZWFzb24pO1xuICB9KTtcbn07XG5cbi8qKlxuICBgUHJvbWlzZS5hbGxgIGFjY2VwdHMgYW4gYXJyYXkgb2YgcHJvbWlzZXMsIGFuZCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2hcbiAgaXMgZnVsZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgZnVsZmlsbG1lbnQgdmFsdWVzIGZvciB0aGUgcGFzc2VkIHByb21pc2VzLCBvclxuICByZWplY3RlZCB3aXRoIHRoZSByZWFzb24gb2YgdGhlIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIGJlIHJlamVjdGVkLiBJdCBjYXN0cyBhbGxcbiAgZWxlbWVudHMgb2YgdGhlIHBhc3NlZCBpdGVyYWJsZSB0byBwcm9taXNlcyBhcyBpdCBydW5zIHRoaXMgYWxnb3JpdGhtLlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZXNvbHZlKDIpO1xuICBsZXQgcHJvbWlzZTMgPSByZXNvbHZlKDMpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gVGhlIGFycmF5IGhlcmUgd291bGQgYmUgWyAxLCAyLCAzIF07XG4gIH0pO1xuICBgYGBcblxuICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYGFsbGAgYXJlIHJlamVjdGVkLCB0aGUgZmlyc3QgcHJvbWlzZVxuICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIHJldHVybmVkIHByb21pc2VzJ3NcbiAgcmVqZWN0aW9uIGhhbmRsZXIuIEZvciBleGFtcGxlOlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZWplY3QobmV3IEVycm9yKFwiMlwiKSk7XG4gIGxldCBwcm9taXNlMyA9IHJlamVjdChuZXcgRXJyb3IoXCIzXCIpKTtcbiAgbGV0IHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07XG5cbiAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oYXJyYXkpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zIGJlY2F1c2UgdGhlcmUgYXJlIHJlamVjdGVkIHByb21pc2VzIVxuICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgIC8vIGVycm9yLm1lc3NhZ2UgPT09IFwiMlwiXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIGFsbFxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IGVudHJpZXMgYXJyYXkgb2YgcHJvbWlzZXNcbiAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCBgcHJvbWlzZXNgIGhhdmUgYmVlblxuICBmdWxmaWxsZWQsIG9yIHJlamVjdGVkIGlmIGFueSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC5cbiAgQHN0YXRpY1xuKi9cbmZ1bmN0aW9uIGFsbChlbnRyaWVzKSB7XG4gIHJldHVybiBuZXcgRW51bWVyYXRvcih0aGlzLCBlbnRyaWVzKS5wcm9taXNlO1xufVxuXG4vKipcbiAgYFByb21pc2UucmFjZWAgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoIGlzIHNldHRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZVxuICBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBzZXR0bGUuXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVzb2x2ZSgncHJvbWlzZSAxJyk7XG4gICAgfSwgMjAwKTtcbiAgfSk7XG5cbiAgbGV0IHByb21pc2UyID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDInKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyByZXN1bHQgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgaXQgd2FzIHJlc29sdmVkIGJlZm9yZSBwcm9taXNlMVxuICAgIC8vIHdhcyByZXNvbHZlZC5cbiAgfSk7XG4gIGBgYFxuXG4gIGBQcm9taXNlLnJhY2VgIGlzIGRldGVybWluaXN0aWMgaW4gdGhhdCBvbmx5IHRoZSBzdGF0ZSBvZiB0aGUgZmlyc3RcbiAgc2V0dGxlZCBwcm9taXNlIG1hdHRlcnMuIEZvciBleGFtcGxlLCBldmVuIGlmIG90aGVyIHByb21pc2VzIGdpdmVuIHRvIHRoZVxuICBgcHJvbWlzZXNgIGFycmF5IGFyZ3VtZW50IGFyZSByZXNvbHZlZCwgYnV0IHRoZSBmaXJzdCBzZXR0bGVkIHByb21pc2UgaGFzXG4gIGJlY29tZSByZWplY3RlZCBiZWZvcmUgdGhlIG90aGVyIHByb21pc2VzIGJlY2FtZSBmdWxmaWxsZWQsIHRoZSByZXR1cm5lZFxuICBwcm9taXNlIHdpbGwgYmVjb21lIHJlamVjdGVkOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Byb21pc2UgMicpKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVuc1xuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAncHJvbWlzZSAyJyBiZWNhdXNlIHByb21pc2UgMiBiZWNhbWUgcmVqZWN0ZWQgYmVmb3JlXG4gICAgLy8gcHJvbWlzZSAxIGJlY2FtZSBmdWxmaWxsZWRcbiAgfSk7XG4gIGBgYFxuXG4gIEFuIGV4YW1wbGUgcmVhbC13b3JsZCB1c2UgY2FzZSBpcyBpbXBsZW1lbnRpbmcgdGltZW91dHM6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBQcm9taXNlLnJhY2UoW2FqYXgoJ2Zvby5qc29uJyksIHRpbWVvdXQoNTAwMCldKVxuICBgYGBcblxuICBAbWV0aG9kIHJhY2VcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FycmF5fSBwcm9taXNlcyBhcnJheSBvZiBwcm9taXNlcyB0byBvYnNlcnZlXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHdoaWNoIHNldHRsZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdCBwYXNzZWRcbiAgcHJvbWlzZSB0byBzZXR0bGUuXG4qL1xuZnVuY3Rpb24gcmFjZShlbnRyaWVzKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKCFpc0FycmF5KGVudHJpZXMpKSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAoXywgcmVqZWN0KSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnJlc29sdmUoZW50cmllc1tpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZWplY3RgIHJldHVybnMgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIHBhc3NlZCBgcmVhc29uYC5cbiAgSXQgaXMgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYWJvdmUsIHlvdXIgY29kZSBub3cgc2ltcGx5IGJlY29tZXMgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXSE9PUFMnKSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgcmVqZWN0XG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHJlYXNvbiB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aC5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgZ2l2ZW4gYHJlYXNvbmAuXG4qL1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3JlamVjdChwcm9taXNlLCByZWFzb24pO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbmVlZHNSZXNvbHZlcigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xufVxuXG5mdW5jdGlvbiBuZWVkc05ldygpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbn1cblxuLyoqXG4gIFByb21pc2Ugb2JqZWN0cyByZXByZXNlbnQgdGhlIGV2ZW50dWFsIHJlc3VsdCBvZiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLiBUaGVcbiAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2hcbiAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uXG4gIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuXG4gIFRlcm1pbm9sb2d5XG4gIC0tLS0tLS0tLS0tXG5cbiAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAgbWV0aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi5cbiAgLSBgdGhlbmFibGVgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBgdGhlbmAgbWV0aG9kLlxuICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2FsIEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEgcHJvbWlzZSkuXG4gIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhyb3cgc3RhdGVtZW50LlxuICAtIGByZWFzb25gIGlzIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2h5IGEgcHJvbWlzZSB3YXMgcmVqZWN0ZWQuXG4gIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEgcHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuXG4gIEEgcHJvbWlzZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciByZWplY3RlZC5cblxuICBQcm9taXNlcyB0aGF0IGFyZSBmdWxmaWxsZWQgaGF2ZSBhIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBhcmUgaW4gdGhlIGZ1bGZpbGxlZFxuICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlXG4gIHJlamVjdGVkIHN0YXRlLiAgQSBmdWxmaWxsbWVudCB2YWx1ZSBpcyBuZXZlciBhIHRoZW5hYmxlLlxuXG4gIFByb21pc2VzIGNhbiBhbHNvIGJlIHNhaWQgdG8gKnJlc29sdmUqIGEgdmFsdWUuICBJZiB0aGlzIHZhbHVlIGlzIGFsc28gYVxuICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBwcm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzXG4gIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2lsbFxuICBpdHNlbGYgcmVqZWN0LCBhbmQgYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aWxsXG4gIGl0c2VsZiBmdWxmaWxsLlxuXG5cbiAgQmFzaWMgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLVxuXG4gIGBgYGpzXG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgLy8gb24gc3VjY2Vzc1xuICAgIHJlc29sdmUodmFsdWUpO1xuXG4gICAgLy8gb24gZmFpbHVyZVxuICAgIHJlamVjdChyZWFzb24pO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAvLyBvbiBmdWxmaWxsbWVudFxuICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAvLyBvbiByZWplY3Rpb25cbiAgfSk7XG4gIGBgYFxuXG4gIEFkdmFuY2VkIFVzYWdlOlxuICAtLS0tLS0tLS0tLS0tLS1cblxuICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzXG4gIGBYTUxIdHRwUmVxdWVzdGBzLlxuXG4gIGBgYGpzXG4gIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2pzb24nO1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICB4aHIuc2VuZCgpO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjogYCcgKyB1cmwgKyAnYCBmYWlsZWQgd2l0aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRKU09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rpb24oanNvbikge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgVW5saWtlIGNhbGxiYWNrcywgcHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy5cblxuICBgYGBqc1xuICBQcm9taXNlLmFsbChbXG4gICAgZ2V0SlNPTignL3Bvc3RzJyksXG4gICAgZ2V0SlNPTignL2NvbW1lbnRzJylcbiAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpe1xuICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0c0pTT05cbiAgICB2YWx1ZXNbMV0gLy8gPT4gY29tbWVudHNKU09OXG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9KTtcbiAgYGBgXG5cbiAgQGNsYXNzIFByb21pc2VcbiAgQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXJcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAY29uc3RydWN0b3JcbiovXG5mdW5jdGlvbiBQcm9taXNlKHJlc29sdmVyKSB7XG4gIHRoaXNbUFJPTUlTRV9JRF0gPSBuZXh0SWQoKTtcbiAgdGhpcy5fcmVzdWx0ID0gdGhpcy5fc3RhdGUgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgaWYgKG5vb3AgIT09IHJlc29sdmVyKSB7XG4gICAgdHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nICYmIG5lZWRzUmVzb2x2ZXIoKTtcbiAgICB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSA/IGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKSA6IG5lZWRzTmV3KCk7XG4gIH1cbn1cblxuUHJvbWlzZS5hbGwgPSBhbGw7XG5Qcm9taXNlLnJhY2UgPSByYWNlO1xuUHJvbWlzZS5yZXNvbHZlID0gcmVzb2x2ZTtcblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuUHJvbWlzZS5fc2V0U2NoZWR1bGVyID0gc2V0U2NoZWR1bGVyO1xuUHJvbWlzZS5fc2V0QXNhcCA9IHNldEFzYXA7XG5Qcm9taXNlLl9hc2FwID0gYXNhcDtcblxuUHJvbWlzZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBQcm9taXNlLFxuXG4gIC8qKlxuICAgIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLFxuICAgIHdoaWNoIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlXG4gICAgcmVhc29uIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbih1c2VyKXtcbiAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHVzZXIgaXMgdW5hdmFpbGFibGUsIGFuZCB5b3UgYXJlIGdpdmVuIHRoZSByZWFzb24gd2h5XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIENoYWluaW5nXG4gICAgLS0tLS0tLS1cbiAgXG4gICAgVGhlIHJldHVybiB2YWx1ZSBvZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMgc2Vjb25kLCAnZG93bnN0cmVhbSdcbiAgICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3QgcHJvbWlzZSdzIGZ1bGZpbGxtZW50XG4gICAgb3IgcmVqZWN0aW9uIGhhbmRsZXIsIG9yIHJlamVjdGVkIGlmIHRoZSBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICByZXR1cm4gdXNlci5uYW1lO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiAnZGVmYXVsdCBuYW1lJztcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdFxuICAgICAgLy8gd2lsbCBiZSBgJ2RlZmF1bHQgbmFtZSdgXG4gICAgfSk7XG4gIFxuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gaWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGByZWFzb25gIHdpbGwgYmUgJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jy5cbiAgICAgIC8vIElmIGBmaW5kVXNlcmAgcmVqZWN0ZWQsIGByZWFzb25gIHdpbGwgYmUgJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknLlxuICAgIH0pO1xuICAgIGBgYFxuICAgIElmIHRoZSBkb3duc3RyZWFtIHByb21pc2UgZG9lcyBub3Qgc3BlY2lmeSBhIHJlamVjdGlvbiBoYW5kbGVyLCByZWplY3Rpb24gcmVhc29ucyB3aWxsIGJlIHByb3BhZ2F0ZWQgZnVydGhlciBkb3duc3RyZWFtLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBlZGFnb2dpY2FsRXhjZXB0aW9uKCdVcHN0cmVhbSBlcnJvcicpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBUaGUgYFBlZGdhZ29jaWFsRXhjZXB0aW9uYCBpcyBwcm9wYWdhdGVkIGFsbCB0aGUgd2F5IGRvd24gdG8gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBBc3NpbWlsYXRpb25cbiAgICAtLS0tLS0tLS0tLS1cbiAgXG4gICAgU29tZXRpbWVzIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBwcm9wYWdhdGUgdG8gYSBkb3duc3RyZWFtIHByb21pc2UgY2FuIG9ubHkgYmVcbiAgICByZXRyaWV2ZWQgYXN5bmNocm9ub3VzbHkuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHJldHVybmluZyBhIHByb21pc2UgaW4gdGhlXG4gICAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgICB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBzZXR0bGVkLiBUaGlzIGlzIGNhbGxlZCAqYXNzaW1pbGF0aW9uKi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gVGhlIHVzZXIncyBjb21tZW50cyBhcmUgbm93IGF2YWlsYWJsZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCBmdWxmaWxscywgd2UnbGwgaGF2ZSB0aGUgdmFsdWUgaGVyZVxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgcmVqZWN0cywgd2UnbGwgaGF2ZSB0aGUgcmVhc29uIGhlcmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgU2ltcGxlIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgcmVzdWx0O1xuICBcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgpO1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfVxuICAgIGBgYFxuICBcbiAgICBFcnJiYWNrIEV4YW1wbGVcbiAgXG4gICAgYGBganNcbiAgICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBQcm9taXNlIEV4YW1wbGU7XG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBmaW5kUmVzdWx0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFkdmFuY2VkIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgYXV0aG9yLCBib29rcztcbiAgXG4gICAgdHJ5IHtcbiAgICAgIGF1dGhvciA9IGZpbmRBdXRob3IoKTtcbiAgICAgIGJvb2tzICA9IGZpbmRCb29rc0J5QXV0aG9yKGF1dGhvcik7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICBcbiAgICBmdW5jdGlvbiBmb3VuZEJvb2tzKGJvb2tzKSB7XG4gIFxuICAgIH1cbiAgXG4gICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHtcbiAgXG4gICAgfVxuICBcbiAgICBmaW5kQXV0aG9yKGZ1bmN0aW9uKGF1dGhvciwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZpbmRCb29va3NCeUF1dGhvcihhdXRob3IsIGZ1bmN0aW9uKGJvb2tzLCBlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tzKTtcbiAgICAgICAgICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRBdXRob3IoKS5cbiAgICAgIHRoZW4oZmluZEJvb2tzQnlBdXRob3IpLlxuICAgICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAgIC8vIGZvdW5kIGJvb2tzXG4gICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEBtZXRob2QgdGhlblxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3RlZFxuICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAqL1xuICB0aGVuOiB0aGVuLFxuXG4gIC8qKlxuICAgIGBjYXRjaGAgaXMgc2ltcGx5IHN1Z2FyIGZvciBgdGhlbih1bmRlZmluZWQsIG9uUmVqZWN0aW9uKWAgd2hpY2ggbWFrZXMgaXQgdGhlIHNhbWVcbiAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuICBcbiAgICBgYGBqc1xuICAgIGZ1bmN0aW9uIGZpbmRBdXRob3IoKXtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGRuJ3QgZmluZCB0aGF0IGF1dGhvcicpO1xuICAgIH1cbiAgXG4gICAgLy8gc3luY2hyb25vdXNcbiAgICB0cnkge1xuICAgICAgZmluZEF1dGhvcigpO1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH1cbiAgXG4gICAgLy8gYXN5bmMgd2l0aCBwcm9taXNlc1xuICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCBjYXRjaFxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0aW9uXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gICdjYXRjaCc6IGZ1bmN0aW9uIF9jYXRjaChvblJlamVjdGlvbikge1xuICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBwb2x5ZmlsbCgpIHtcbiAgICB2YXIgbG9jYWwgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBnbG9iYWw7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBzZWxmO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2NhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUCA9IGxvY2FsLlByb21pc2U7XG5cbiAgICBpZiAoUCkge1xuICAgICAgICB2YXIgcHJvbWlzZVRvU3RyaW5nID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChQLnJlc29sdmUoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIHNpbGVudGx5IGlnbm9yZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9taXNlVG9TdHJpbmcgPT09ICdbb2JqZWN0IFByb21pc2VdJyAmJiAhUC5jYXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2NhbC5Qcm9taXNlID0gUHJvbWlzZTtcbn1cblxuLy8gU3RyYW5nZSBjb21wYXQuLlxuUHJvbWlzZS5wb2x5ZmlsbCA9IHBvbHlmaWxsO1xuUHJvbWlzZS5Qcm9taXNlID0gUHJvbWlzZTtcblxucmV0dXJuIFByb21pc2U7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lczYtcHJvbWlzZS5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vZXM2LXByb21pc2UvZGlzdC9lczYtcHJvbWlzZS5qc1xuLy8gbW9kdWxlIGlkID0gODVcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==");
},,,,function(module,exports){eval("(function() {\n 'use strict';\n\n // if __disableNativeFetch is set to true, the it will always polyfill fetch\n // with Ajax.\n if (!self.__disableNativeFetch && self.fetch) {\n return\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob, options) {\n var reader = new FileReader()\n var contentType = options.headers.map['content-type'] ? options.headers.map['content-type'].toString() : ''\n var regex = /charset\\=[0-9a-zA-Z\\-\\_]*;?/\n var _charset = blob.type.match(regex) || contentType.match(regex)\n var args = [blob]\n\n if(_charset) {\n args.push(_charset[0].replace(/^charset\\=/, '').replace(/;$/, ''))\n }\n\n reader.readAsText.apply(reader, args)\n return fileReaderReady(reader)\n }\n\n var support = {\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n function Body() {\n this.bodyUsed = false\n\n\n this._initBody = function(body, options) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n this._options = options\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (!body) {\n this._bodyText = ''\n } else if (support.arrayBuffer && ArrayBuffer.prototype.isPrototypeOf(body)) {\n // Only support ArrayBuffers for POST method.\n // Receiving ArrayBuffers happens via Blobs, instead.\n } else {\n throw new Error('unsupported BodyInit type')\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob, this._options)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body, options)\n }\n\n Request.prototype.clone = function() {\n return new Request(this)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = xhr.getAllResponseHeaders().trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this._initBody(bodyInit, options)\n this.type = 'default'\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return;\n }\n\n var __onLoadHandled = false;\n\n function onload() {\n if (xhr.readyState !== 4) {\n return\n }\n var status = (xhr.status === 1223) ? 204 : xhr.status\n if (status < 100 || status > 599) {\n if (__onLoadHandled) { return; } else { __onLoadHandled = true; }\n reject(new TypeError('Network request failed'))\n return\n }\n var options = {\n status: status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n\n if (__onLoadHandled) { return; } else { __onLoadHandled = true; }\n resolve(new Response(body, options))\n }\n xhr.onreadystatechange = onload;\n xhr.onload = onload;\n xhr.onerror = function() {\n if (__onLoadHandled) { return; } else { __onLoadHandled = true; }\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n // `withCredentials` should be setted after calling `.open` in IE10\n // http://stackoverflow.com/a/19667959/1219343\n try {\n if (request.credentials === 'include') {\n if ('withCredentials' in xhr) {\n xhr.withCredentials = true;\n } else {\n console && console.warn && console.warn('withCredentials is not supported, you can ignore this warning');\n }\n }\n } catch (e) {\n console && console.warn && console.warn('set withCredentials error:' + e);\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n\n // Support CommonJS\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = self.fetch;\n }\n})();\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2ZldGNoLWllOC9mZXRjaC5qcz9mOTkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBLGdFQUFnRTtBQUNoRTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSx1Q0FBdUMsMEJBQTBCO0FBQ2pFO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsMEJBQTBCLGVBQWU7QUFDeEU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxRQUFRLEVBQUUsT0FBTyx3QkFBd0I7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCLFFBQVEsRUFBRSxPQUFPLHdCQUF3QjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFFBQVEsRUFBRSxPQUFPLHdCQUF3QjtBQUN2RTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBpZiBfX2Rpc2FibGVOYXRpdmVGZXRjaCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGl0IHdpbGwgYWx3YXlzIHBvbHlmaWxsIGZldGNoXG4gIC8vIHdpdGggQWpheC5cbiAgaWYgKCFzZWxmLl9fZGlzYWJsZU5hdGl2ZUZldGNoICYmIHNlbGYuZmV0Y2gpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgICB9XG4gICAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXFxeX2B8fl0vaS50ZXN0KG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZScpXG4gICAgfVxuICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICAgIHRoaXMubWFwID0ge31cblxuICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgfSwgdGhpcylcblxuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgICB9LCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICAgIHZhciBsaXN0ID0gdGhpcy5tYXBbbmFtZV1cbiAgICBpZiAoIWxpc3QpIHtcbiAgICAgIGxpc3QgPSBbXVxuICAgICAgdGhpcy5tYXBbbmFtZV0gPSBsaXN0XG4gICAgfVxuICAgIGxpc3QucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbiAgICByZXR1cm4gdmFsdWVzID8gdmFsdWVzWzBdIDogbnVsbFxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuZ2V0QWxsID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSB8fCBbXVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IFtub3JtYWxpemVWYWx1ZSh2YWx1ZSldXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLm1hcCkuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aGlzLm1hcFtuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWUsIG5hbWUsIHRoaXMpXG4gICAgICB9LCB0aGlzKVxuICAgIH0sIHRoaXMpXG4gIH1cblxuICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICB9XG4gICAgYm9keS5ib2R5VXNlZCA9IHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICAgIH1cbiAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgICByZXR1cm4gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IsIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgIHZhciBjb250ZW50VHlwZSA9IG9wdGlvbnMuaGVhZGVycy5tYXBbJ2NvbnRlbnQtdHlwZSddID8gb3B0aW9ucy5oZWFkZXJzLm1hcFsnY29udGVudC10eXBlJ10udG9TdHJpbmcoKSA6ICcnXG4gICAgdmFyIHJlZ2V4ID0gL2NoYXJzZXRcXD1bMC05YS16QS1aXFwtXFxfXSo7Py9cbiAgICB2YXIgX2NoYXJzZXQgPSBibG9iLnR5cGUubWF0Y2gocmVnZXgpIHx8IGNvbnRlbnRUeXBlLm1hdGNoKHJlZ2V4KVxuICAgIHZhciBhcmdzID0gW2Jsb2JdXG5cbiAgICBpZihfY2hhcnNldCkge1xuICAgICAgYXJncy5wdXNoKF9jaGFyc2V0WzBdLnJlcGxhY2UoL15jaGFyc2V0XFw9LywgJycpLnJlcGxhY2UoLzskLywgJycpKVxuICAgIH1cblxuICAgIHJlYWRlci5yZWFkQXNUZXh0LmFwcGx5KHJlYWRlciwgYXJncylcbiAgICByZXR1cm4gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgfVxuXG4gIHZhciBzdXBwb3J0ID0ge1xuICAgIGJsb2I6ICdGaWxlUmVhZGVyJyBpbiBzZWxmICYmICdCbG9iJyBpbiBzZWxmICYmIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKCk7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSkoKSxcbiAgICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBzZWxmLFxuICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIHNlbGZcbiAgfVxuXG4gIGZ1bmN0aW9uIEJvZHkoKSB7XG4gICAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cblxuICAgIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSwgb3B0aW9ucykge1xuICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnNcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgICB9IGVsc2UgaWYgKCFib2R5KSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICAvLyBPbmx5IHN1cHBvcnQgQXJyYXlCdWZmZXJzIGZvciBQT1NUIG1ldGhvZC5cbiAgICAgICAgLy8gUmVjZWl2aW5nIEFycmF5QnVmZmVycyBoYXBwZW5zIHZpYSBCbG9icywgaW5zdGVhZC5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgQm9keUluaXQgdHlwZScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgIH1cblxuICAgICAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iLCB0aGlzLl9vcHRpb25zKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICByZXR1cm4gcmVqZWN0ZWQgPyByZWplY3RlZCA6IFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbiAgdmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuICBmdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gICAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgIHJldHVybiAobWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEpID8gdXBjYXNlZCA6IG1ldGhvZFxuICB9XG5cbiAgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcbiAgICBpZiAoUmVxdWVzdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihpbnB1dCkpIHtcbiAgICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgICAgfVxuICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cmwgPSBpbnB1dFxuICAgIH1cblxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ29taXQnXG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICAgIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICAgIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gICAgfVxuICAgIHRoaXMuX2luaXRCb2R5KGJvZHksIG9wdGlvbnMpXG4gIH1cblxuICBSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzKVxuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgYm9keS50cmltKCkuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBmb3JtXG4gIH1cblxuICBmdW5jdGlvbiBoZWFkZXJzKHhocikge1xuICAgIHZhciBoZWFkID0gbmV3IEhlYWRlcnMoKVxuICAgIHZhciBwYWlycyA9IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKS50cmltKCkuc3BsaXQoJ1xcbicpXG4gICAgcGFpcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHZhciBzcGxpdCA9IGhlYWRlci50cmltKCkuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHNwbGl0LnNoaWZ0KCkudHJpbSgpXG4gICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc6JykudHJpbSgpXG4gICAgICBoZWFkLmFwcGVuZChrZXksIHZhbHVlKVxuICAgIH0pXG4gICAgcmV0dXJuIGhlYWRcbiAgfVxuXG4gIEJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuICBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQsIG9wdGlvbnMpXG4gICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gICAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1c1xuICAgIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHRcbiAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzID8gb3B0aW9ucy5oZWFkZXJzIDogbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgfVxuXG4gIEJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cbiAgUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICB1cmw6IHRoaXMudXJsXG4gICAgfSlcbiAgfVxuXG4gIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbiAgUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICAgIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbiAgfVxuXG4gIHNlbGYuSGVhZGVycyA9IEhlYWRlcnM7XG4gIHNlbGYuUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIHNlbGYuUmVzcG9uc2UgPSBSZXNwb25zZTtcblxuICBzZWxmLmZldGNoID0gZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVxdWVzdFxuICAgICAgaWYgKFJlcXVlc3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoaW5wdXQpICYmICFpbml0KSB7XG4gICAgICAgIHJlcXVlc3QgPSBpbnB1dFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICAgICAgfVxuXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgICAgZnVuY3Rpb24gcmVzcG9uc2VVUkwoKSB7XG4gICAgICAgIGlmICgncmVzcG9uc2VVUkwnIGluIHhocikge1xuICAgICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VVUkxcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEF2b2lkIHNlY3VyaXR5IHdhcm5pbmdzIG9uIGdldFJlc3BvbnNlSGVhZGVyIHdoZW4gbm90IGFsbG93ZWQgYnkgQ09SU1xuICAgICAgICBpZiAoL15YLVJlcXVlc3QtVVJMOi9tLnRlc3QoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSkge1xuICAgICAgICAgIHJldHVybiB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgX19vbkxvYWRIYW5kbGVkID0gZmFsc2U7XG5cbiAgICAgIGZ1bmN0aW9uIG9ubG9hZCgpIHtcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN0YXR1cyA9ICh4aHIuc3RhdHVzID09PSAxMjIzKSA/IDIwNCA6IHhoci5zdGF0dXNcbiAgICAgICAgaWYgKHN0YXR1cyA8IDEwMCB8fCBzdGF0dXMgPiA1OTkpIHtcbiAgICAgICAgICBpZiAoX19vbkxvYWRIYW5kbGVkKSB7IHJldHVybjsgfSBlbHNlIHsgX19vbkxvYWRIYW5kbGVkID0gdHJ1ZTsgfVxuICAgICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogaGVhZGVycyh4aHIpLFxuICAgICAgICAgIHVybDogcmVzcG9uc2VVUkwoKVxuICAgICAgICB9XG4gICAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0O1xuXG4gICAgICAgIGlmIChfX29uTG9hZEhhbmRsZWQpIHsgcmV0dXJuOyB9IGVsc2UgeyBfX29uTG9hZEhhbmRsZWQgPSB0cnVlOyB9XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfVxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG9ubG9hZDtcbiAgICAgIHhoci5vbmxvYWQgPSBvbmxvYWQ7XG4gICAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoX19vbkxvYWRIYW5kbGVkKSB7IHJldHVybjsgfSBlbHNlIHsgX19vbkxvYWRIYW5kbGVkID0gdHJ1ZTsgfVxuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfVxuXG4gICAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgcmVxdWVzdC51cmwsIHRydWUpXG5cbiAgICAgIC8vIGB3aXRoQ3JlZGVudGlhbHNgIHNob3VsZCBiZSBzZXR0ZWQgYWZ0ZXIgY2FsbGluZyBgLm9wZW5gIGluIElFMTBcbiAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE5NjY3OTU5LzEyMTkzNDNcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgICBpZiAoJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB7XG4gICAgICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZSAmJiBjb25zb2xlLndhcm4gJiYgY29uc29sZS53YXJuKCd3aXRoQ3JlZGVudGlhbHMgaXMgbm90IHN1cHBvcnRlZCwgeW91IGNhbiBpZ25vcmUgdGhpcyB3YXJuaW5nJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUgJiYgY29uc29sZS53YXJuICYmIGNvbnNvbGUud2Fybignc2V0IHdpdGhDcmVkZW50aWFscyBlcnJvcjonICsgZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIgJiYgc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH1cblxuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuXG4gICAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICAgIH0pXG4gIH1cbiAgc2VsZi5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuICAvLyBTdXBwb3J0IENvbW1vbkpTXG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gc2VsZi5mZXRjaDtcbiAgfVxufSkoKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9mZXRjaC1pZTgvZmV0Y2guanNcbi8vIG1vZHVsZSBpZCA9IDg5XG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3VyY2VSb290IjoiIn0=")},,,,function(module,exports){eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3Byb2Nlc3MvYnJvd3Nlci5qcz84MmU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVUiLCJmaWxlIjoiOTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gOTNcbi8vIG1vZHVsZSBjaHVua3MgPSAxIl0sInNvdXJjZVJvb3QiOiIifQ==");
},function(module,exports){eval("module.exports = function(module) {\n\tif(!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tmodule.children = [];\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzP2MzYzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZighbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanNcbi8vIG1vZHVsZSBpZCA9IDk0XG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports){eval("/* (ignored) */\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vdmVydHggKGlnbm9yZWQpPzdhNGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiOTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiAoaWdub3JlZCkgKi9cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyB2ZXJ0eCAoaWdub3JlZClcbi8vIG1vZHVsZSBpZCA9IDk1XG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3VyY2VSb290IjoiIn0=")}]);