diff options
| author | Wes Bos <wesbos@gmail.com> | 2017-08-25 09:33:53 -0400 |
|---|---|---|
| committer | Wes Bos <wesbos@gmail.com> | 2017-08-25 09:33:53 -0400 |
| commit | 7af74ff8988961c988f03c95961b70c2918521ae (patch) | |
| tree | d73cd0dd94751b76595b7febcae4162811c2040b /.next/bundles | |
| parent | 416c2cbae0e69b724876d232bf813eefd7550174 (diff) | |
yay
Diffstat (limited to '.next/bundles')
| -rw-r--r-- | .next/bundles/pages/index.js | 1386 | ||||
| -rw-r--r-- | .next/bundles/pages/orders.js | 2192 |
2 files changed, 3142 insertions, 436 deletions
diff --git a/.next/bundles/pages/index.js b/.next/bundles/pages/index.js index e21271f..0eb1828 100644 --- a/.next/bundles/pages/index.js +++ b/.next/bundles/pages/index.js @@ -1,9 +1,9 @@ window.__NEXT_REGISTER_PAGE('/', function() { var comp = module.exports = -webpackJsonp([5],{ +webpackJsonp([6],{ -/***/ 549: +/***/ 557: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -12,174 +12,51 @@ webpackJsonp([5],{ Object.defineProperty(exports, "__esModule", { value: true }); -exports.UPDATE_LINK_MUTATION = exports.DELETE_ITEM_MUTATION = exports.SINGLE_LINK_QUERY = exports.ALL_ITEMS_QUERY = exports.CREATE_ORDER_MUTATION = exports.CREATE_LINK_MUTATION = undefined; +exports.USER_ORDERS_QUERY = exports.CURRENT_USER_QUERY = exports.UPDATE_LINK_MUTATION = exports.DELETE_ITEM_MUTATION = exports.SINGLE_LINK_QUERY = exports.ALL_ITEMS_QUERY = exports.CREATE_ORDER_MUTATION = exports.CREATE_USER_MUTATION = exports.CREATE_LINK_MUTATION = undefined; -var _taggedTemplateLiteral2 = __webpack_require__(562); +var _taggedTemplateLiteral2 = __webpack_require__(576); var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); -var _reactApollo = __webpack_require__(540); +var _reactApollo = __webpack_require__(547); -var _fragments = __webpack_require__(647); +var _fragments = __webpack_require__(733); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n ', '\n mutation CreateLinkMutation($description: String!, $title: String!, $imageId: ID) {\n createItem(\n description: $description,\n title: $title,\n imageId: $imageId\n ) {\n ...itemDetails\n }\n }\n'], ['\n ', '\n mutation CreateLinkMutation($description: String!, $title: String!, $imageId: ID) {\n createItem(\n description: $description,\n title: $title,\n imageId: $imageId\n ) {\n ...itemDetails\n }\n }\n']), - _templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n mutation CreateOrderMutation($token: String!) {\n createOrder(token: $token) {\n id,\n token,\n charge,\n amount,\n }\n }\n'], ['\n mutation CreateOrderMutation($token: String!) {\n createOrder(token: $token) {\n id,\n token,\n charge,\n amount,\n }\n }\n']), - _templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n # Import the Fragment\n ', '\n query AllLinksQuery {\n allItems(orderBy: createdAt_DESC) {\n # Use that fragment by it\'s name (even though it the same as the variable)\n ...itemDetails\n }\n }\n'], ['\n # Import the Fragment\n ', '\n query AllLinksQuery {\n allItems(orderBy: createdAt_DESC) {\n # Use that fragment by it\'s name (even though it the same as the variable)\n ...itemDetails\n }\n }\n']), - _templateObject4 = (0, _taggedTemplateLiteral3.default)(['\n ', '\n query FindItem($id: ID!) {\n Item(id: $id) {\n ...itemDetails\n }\n }\n'], ['\n ', '\n query FindItem($id: ID!) {\n Item(id: $id) {\n ...itemDetails\n }\n }\n']), - _templateObject5 = (0, _taggedTemplateLiteral3.default)(['\n mutation DelteItem($id: ID!) {\n deleteItem(id: $id) {\n id,\n title,\n description\n }\n }\n'], ['\n mutation DelteItem($id: ID!) {\n deleteItem(id: $id) {\n id,\n title,\n description\n }\n }\n']), - _templateObject6 = (0, _taggedTemplateLiteral3.default)(['\n ', '\n mutation UpdateItem($id: ID!, $title: String!, $description: String!, $price: Int!, $fullPrice: Int!) {\n updateItem(\n id: $id,\n description: $description,\n title: $title,\n price: $price,\n fullPrice: $fullPrice\n ) {\n ...itemDetails\n }\n }\n'], ['\n ', '\n mutation UpdateItem($id: ID!, $title: String!, $description: String!, $price: Int!, $fullPrice: Int!) {\n updateItem(\n id: $id,\n description: $description,\n title: $title,\n price: $price,\n fullPrice: $fullPrice\n ) {\n ...itemDetails\n }\n }\n']); +var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n ', '\n mutation CreateLinkMutation($description: String!, $title: String!, $imageId: ID, $price: Int!) {\n createItem(\n description: $description,\n title: $title,\n imageId: $imageId\n price: $price\n ) {\n ...itemDetails\n }\n }\n'], ['\n ', '\n mutation CreateLinkMutation($description: String!, $title: String!, $imageId: ID, $price: Int!) {\n createItem(\n description: $description,\n title: $title,\n imageId: $imageId\n price: $price\n ) {\n ...itemDetails\n }\n }\n']), + _templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n mutation CreateUserMutation($email: String!, $name: String!, $idToken: String!) {\n createUser(\n email: $email,\n name: $name,\n authProvider: { auth0: { idToken: $idToken } }\n ) {\n id,\n email,\n name\n }\n }\n'], ['\n mutation CreateUserMutation($email: String!, $name: String!, $idToken: String!) {\n createUser(\n email: $email,\n name: $name,\n authProvider: { auth0: { idToken: $idToken } }\n ) {\n id,\n email,\n name\n }\n }\n']), + _templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n mutation CreateOrderMutation($token: String!, $userId: ID!, $itemId: ID!) {\n createOrder(token: $token, userId: $userId, itemId: $itemId) {\n id\n token\n charge\n amount\n item {\n id\n title\n description\n }\n user {\n id\n email\n }\n }\n }\n'], ['\n mutation CreateOrderMutation($token: String!, $userId: ID!, $itemId: ID!) {\n createOrder(token: $token, userId: $userId, itemId: $itemId) {\n id\n token\n charge\n amount\n item {\n id\n title\n description\n }\n user {\n id\n email\n }\n }\n }\n']), + _templateObject4 = (0, _taggedTemplateLiteral3.default)(['\n # Import the Fragment\n ', '\n query AllLinksQuery {\n allItems(orderBy: createdAt_DESC) {\n # Use that fragment by it\'s name (even though it the same as the variable)\n ...itemDetails\n }\n }\n'], ['\n # Import the Fragment\n ', '\n query AllLinksQuery {\n allItems(orderBy: createdAt_DESC) {\n # Use that fragment by it\'s name (even though it the same as the variable)\n ...itemDetails\n }\n }\n']), + _templateObject5 = (0, _taggedTemplateLiteral3.default)(['\n ', '\n query FindItem($id: ID!) {\n Item(id: $id) {\n ...itemDetails\n }\n }\n'], ['\n ', '\n query FindItem($id: ID!) {\n Item(id: $id) {\n ...itemDetails\n }\n }\n']), + _templateObject6 = (0, _taggedTemplateLiteral3.default)(['\n mutation DelteItem($id: ID!) {\n deleteItem(id: $id) {\n id,\n title,\n description\n }\n }\n'], ['\n mutation DelteItem($id: ID!) {\n deleteItem(id: $id) {\n id,\n title,\n description\n }\n }\n']), + _templateObject7 = (0, _taggedTemplateLiteral3.default)(['\n ', '\n mutation UpdateItem($id: ID!, $title: String!, $description: String!, $price: Int!, $fullPrice: Int!) {\n updateItem(\n id: $id,\n description: $description,\n title: $title,\n price: $price,\n fullPrice: $fullPrice\n ) {\n ...itemDetails\n }\n }\n'], ['\n ', '\n mutation UpdateItem($id: ID!, $title: String!, $description: String!, $price: Int!, $fullPrice: Int!) {\n updateItem(\n id: $id,\n description: $description,\n title: $title,\n price: $price,\n fullPrice: $fullPrice\n ) {\n ...itemDetails\n }\n }\n']), + _templateObject8 = (0, _taggedTemplateLiteral3.default)(['\n query userQuery {\n user {\n id\n name\n email\n }\n }\n'], ['\n query userQuery {\n user {\n id\n name\n email\n }\n }\n']), + _templateObject9 = (0, _taggedTemplateLiteral3.default)(['\n query {\n user { # grab the current user\n id\n orders { # and a all their orders\n id\n amount\n charge\n item { # populate the details about the item they bought with the image, description and title\n image {\n id,\n secret\n }\n description\n title\n }\n }\n }\n }\n'], ['\n query {\n user { # grab the current user\n id\n orders { # and a all their orders\n id\n amount\n charge\n item { # populate the details about the item they bought with the image, description and title\n image {\n id,\n secret\n }\n description\n title\n }\n }\n }\n }\n']); var CREATE_LINK_MUTATION = exports.CREATE_LINK_MUTATION = (0, _reactApollo.gql)(_templateObject, _fragments.itemDetails); -var CREATE_ORDER_MUTATION = exports.CREATE_ORDER_MUTATION = (0, _reactApollo.gql)(_templateObject2); +var CREATE_USER_MUTATION = exports.CREATE_USER_MUTATION = (0, _reactApollo.gql)(_templateObject2); -var ALL_ITEMS_QUERY = exports.ALL_ITEMS_QUERY = (0, _reactApollo.gql)(_templateObject3, _fragments.itemDetails); +var CREATE_ORDER_MUTATION = exports.CREATE_ORDER_MUTATION = (0, _reactApollo.gql)(_templateObject3); -var SINGLE_LINK_QUERY = exports.SINGLE_LINK_QUERY = (0, _reactApollo.gql)(_templateObject4, _fragments.itemDetails); +var ALL_ITEMS_QUERY = exports.ALL_ITEMS_QUERY = (0, _reactApollo.gql)(_templateObject4, _fragments.itemDetails); -var DELETE_ITEM_MUTATION = exports.DELETE_ITEM_MUTATION = (0, _reactApollo.gql)(_templateObject5); +var SINGLE_LINK_QUERY = exports.SINGLE_LINK_QUERY = (0, _reactApollo.gql)(_templateObject5, _fragments.itemDetails); -var UPDATE_LINK_MUTATION = exports.UPDATE_LINK_MUTATION = (0, _reactApollo.gql)(_templateObject6, _fragments.itemDetails); +var DELETE_ITEM_MUTATION = exports.DELETE_ITEM_MUTATION = (0, _reactApollo.gql)(_templateObject6); - ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/queries/index.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/queries/index.js"); } } })(); - -/***/ }), - -/***/ 591: -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(592); - - -/***/ }), - -/***/ 592: -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(__resourceQuery) { - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _getPrototypeOf = __webpack_require__(46); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = __webpack_require__(14); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = __webpack_require__(15); - -var _createClass3 = _interopRequireDefault(_createClass2); +var UPDATE_LINK_MUTATION = exports.UPDATE_LINK_MUTATION = (0, _reactApollo.gql)(_templateObject7, _fragments.itemDetails); -var _possibleConstructorReturn2 = __webpack_require__(47); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = __webpack_require__(48); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _react = __webpack_require__(11); - -var _react2 = _interopRequireDefault(_react); - -var _withData = __webpack_require__(593); - -var _withData2 = _interopRequireDefault(_withData); - -var _Items = __webpack_require__(638); +var CURRENT_USER_QUERY = exports.CURRENT_USER_QUERY = (0, _reactApollo.gql)(_templateObject8); -var _Items2 = _interopRequireDefault(_Items); - -var _CreateItem = __webpack_require__(669); - -var _CreateItem2 = _interopRequireDefault(_CreateItem); - -var _Count = __webpack_require__(670); - -var _Count2 = _interopRequireDefault(_Count); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/pages/index.js?entry'; - - -var Home = function (_Component) { - (0, _inherits3.default)(Home, _Component); +var USER_ORDERS_QUERY = exports.USER_ORDERS_QUERY = (0, _reactApollo.gql)(_templateObject9); - function Home() { - (0, _classCallCheck3.default)(this, Home); - - return (0, _possibleConstructorReturn3.default)(this, (Home.__proto__ || (0, _getPrototypeOf2.default)(Home)).apply(this, arguments)); - } - - (0, _createClass3.default)(Home, [{ - key: 'render', - value: function render() { - return _react2.default.createElement('div', { - __source: { - fileName: _jsxFileName, - lineNumber: 10 - } - }, _react2.default.createElement(_Count2.default, { - __source: { - fileName: _jsxFileName, - lineNumber: 11 - } - }), _react2.default.createElement(_CreateItem2.default, { - __source: { - fileName: _jsxFileName, - lineNumber: 12 - } - }), _react2.default.createElement(_Items2.default, { - __source: { - fileName: _jsxFileName, - lineNumber: 13 - } - })); - } - }]); - - return Home; -}(_react.Component); - -exports.default = (0, _withData2.default)(Home); - - ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/pages/index.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/pages/index.js"); } } })(); - (function (Component, route) { - if (false) return - if (false) return - - var qs = __webpack_require__(70) - var params = qs.parse(__resourceQuery.slice(1)) - if (params.entry == null) return - - module.hot.accept() - Component.__route = route - - if (module.hot.status() === 'idle') return - - var components = next.router.components - for (var r in components) { - if (!components.hasOwnProperty(r)) continue - - if (components[r].Component.__route === route) { - next.router.update(r, Component) - } - } - })(typeof __webpack_exports__ !== 'undefined' ? __webpack_exports__.default : (module.exports.default || module.exports), "/") - -/* WEBPACK VAR INJECTION */}.call(exports, "?entry")) + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/queries/index.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/queries/index.js"); } } })(); /***/ }), -/***/ 593: +/***/ 586: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -229,13 +106,13 @@ var _propTypes = __webpack_require__(63); var _propTypes2 = _interopRequireDefault(_propTypes); -var _reactApollo = __webpack_require__(540); +var _reactApollo = __webpack_require__(547); var _head = __webpack_require__(226); var _head2 = _interopRequireDefault(_head); -var _initApollo = __webpack_require__(636); +var _initApollo = __webpack_require__(723); var _initApollo2 = _interopRequireDefault(_initApollo); @@ -384,66 +261,7 @@ exports.default = function (ComposedComponent) { /***/ }), -/***/ 636: -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(process, global) { - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = initApollo; - -var _reactApollo = __webpack_require__(540); - -var _isomorphicFetch = __webpack_require__(637); - -var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var apolloClient = null; - -// Polyfill fetch() on the server (used by apollo-client) -if (!process.browser) { - global.fetch = _isomorphicFetch2.default; -} - -function create(initialState) { - return new _reactApollo.ApolloClient({ - initialState: initialState, - ssrMode: !process.browser, // Disables forceFetch on the server (so queries are only run once) - networkInterface: (0, _reactApollo.createNetworkInterface)({ - uri: 'https://api.graph.cool/simple/v1/cj5xz8szs28930145gct82bdj', // Server URL (must be absolute) - opts: { // Additional fetch() options like `credentials` or `headers` - credentials: 'same-origin' - } - }) - }); -} - -function initApollo(initialState) { - // Make sure to create a new client for every server-side request so that data - // isn't shared between connections (which would be bad) - if (!process.browser) { - return create(initialState); - } - - // Reuse client on the client-side - if (!apolloClient) { - apolloClient = create(initialState); - } - - return apolloClient; -} - - ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/lib/initApollo.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/lib/initApollo.js"); } } })(); -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(54), __webpack_require__(53))) - -/***/ }), - -/***/ 638: +/***/ 635: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -473,7 +291,7 @@ var _inherits2 = __webpack_require__(48); var _inherits3 = _interopRequireDefault(_inherits2); -var _taggedTemplateLiteral2 = __webpack_require__(562); +var _taggedTemplateLiteral2 = __webpack_require__(576); var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); @@ -481,38 +299,48 @@ var _react = __webpack_require__(11); var _react2 = _interopRequireDefault(_react); -var _reactApollo = __webpack_require__(540); +var _reactApollo = __webpack_require__(547); -var _UpdateItem = __webpack_require__(645); +var _UpdateItem = __webpack_require__(731); var _UpdateItem2 = _interopRequireDefault(_UpdateItem); -var _link = __webpack_require__(648); +var _link = __webpack_require__(636); var _link2 = _interopRequireDefault(_link); -var _styledComponents = __webpack_require__(660); +var _styledComponents = __webpack_require__(641); var _styledComponents2 = _interopRequireDefault(_styledComponents); -var _TakeMyMoney = __webpack_require__(666); +var _TakeMyMoney = __webpack_require__(750); var _TakeMyMoney2 = _interopRequireDefault(_TakeMyMoney); -var _formatMoney = __webpack_require__(668); +var _formatMoney = __webpack_require__(752); var _formatMoney2 = _interopRequireDefault(_formatMoney); -var _queries = __webpack_require__(549); +var _image = __webpack_require__(753); + +var _image2 = _interopRequireDefault(_image); + +var _queries = __webpack_require__(557); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/Items.js'; -var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n font-size: 50px;\n'], ['\n font-size: 50px;\n']); +var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n font-size: 50px;\n'], ['\n font-size: 50px;\n']), + _templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n display: grid;\n grid-template-columns: repeat(4, calc(25% - 20px));\n grid-gap: 20px;\n'], ['\n display: grid;\n grid-template-columns: repeat(4, calc(25% - 20px));\n grid-gap: 20px;\n']), + _templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n background: #f3f3f3;\n padding: 20px;\n img {\n width: 100%;\n }\n'], ['\n background: #f3f3f3;\n padding: 20px;\n img {\n width: 100%;\n }\n']); var Title = _styledComponents2.default.h1(_templateObject); +var Items = _styledComponents2.default.div(_templateObject2); + +var Item = _styledComponents2.default.div(_templateObject3); + var ItemList = function (_Component) { (0, _inherits3.default)(ItemList, _Component); @@ -532,7 +360,7 @@ var ItemList = function (_Component) { return _react2.default.createElement('div', { __source: { fileName: _jsxFileName, - lineNumber: 21 + lineNumber: 38 } }, 'Loading'); } @@ -543,7 +371,7 @@ var ItemList = function (_Component) { return _react2.default.createElement('div', { __source: { fileName: _jsxFileName, - lineNumber: 27 + lineNumber: 44 } }, 'Error'); } @@ -551,75 +379,67 @@ var ItemList = function (_Component) { // 3 var itemsToRender = this.props.allLinksQuery.allItems; - return _react2.default.createElement('div', { + return _react2.default.createElement(Items, { __source: { fileName: _jsxFileName, - lineNumber: 34 + lineNumber: 51 } }, _react2.default.createElement(Title, { __source: { fileName: _jsxFileName, - lineNumber: 35 + lineNumber: 52 } }, 'Items For Sale'), itemsToRender.map(function (item, i) { - return _react2.default.createElement('div', { className: 'item', key: i, __source: { - fileName: _jsxFileName, - lineNumber: 37 - } - }, _react2.default.createElement('hr', { - __source: { + return _react2.default.createElement(Item, { className: 'item', key: i, __source: { fileName: _jsxFileName, - lineNumber: 38 + lineNumber: 54 } - }), item.image ? _react2.default.createElement('img', { src: 'https://images.graph.cool/v1/cj5xz8szs28930145gct82bdj/' + item.image.secret + '/300x300', __source: { + }, item.image ? _react2.default.createElement('img', { src: (0, _image2.default)(item.image), __source: { fileName: _jsxFileName, - lineNumber: 39 + lineNumber: 55 } }) : null, _react2.default.createElement('h3', { __source: { fileName: _jsxFileName, - lineNumber: 40 + lineNumber: 56 } }, item.title), _react2.default.createElement('p', { __source: { fileName: _jsxFileName, - lineNumber: 41 + lineNumber: 57 } }, item.description), _react2.default.createElement(_link2.default, { href: { pathname: '/admin/update', query: { id: item.id } }, __source: { fileName: _jsxFileName, - lineNumber: 42 + lineNumber: 58 } }, _react2.default.createElement('a', { __source: { fileName: _jsxFileName, - lineNumber: 46 + lineNumber: 62 } }, 'Edit ', item.id)), _react2.default.createElement(_TakeMyMoney2.default, { + id: item.id, amount: item.price, name: item.title // the pop-in header title , description: item.description // the pop-in header subtitle - , image: 'https://images.graph.cool/v1/cj5xz8szs28930145gct82bdj/' + item.image.secret + '/300x300', + , image: (0, _image2.default)(item.image), __source: { fileName: _jsxFileName, - lineNumber: 49 + lineNumber: 65 } }, _react2.default.createElement('button', { __source: { fileName: _jsxFileName, - lineNumber: 55 + lineNumber: 72 } - }, 'Buy for ', (0, _formatMoney2.default)(item.price))), _react2.default.createElement(_UpdateItem2.default, { id: item.id, __source: { - fileName: _jsxFileName, - lineNumber: 58 - } - }), _react2.default.createElement('button', { onClick: function onClick() { + }, 'Buy for ', (0, _formatMoney2.default)(item.price))), _react2.default.createElement('button', { onClick: function onClick() { return _this2.props.removeItemMutation({ variables: { id: item.id } }); }, __source: { fileName: _jsxFileName, - lineNumber: 60 + lineNumber: 74 } }, '\xD7 Delete item')); })); @@ -663,7 +483,600 @@ exports.default = (0, _reactApollo.compose)(itemsEnahncer, deleteItemEnhancer)(I /***/ }), -/***/ 645: +/***/ 642: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _regenerator = __webpack_require__(75); + +var _regenerator2 = _interopRequireDefault(_regenerator); + +var _asyncToGenerator2 = __webpack_require__(76); + +var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _reactApollo = __webpack_require__(547); + +var _queries = __webpack_require__(557); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/CreateItem.js'; + + +var CreateLink = function (_Component) { + (0, _inherits3.default)(CreateLink, _Component); + + function CreateLink() { + var _ref, + _this2 = this; + + var _temp, _this, _ret; + + (0, _classCallCheck3.default)(this, CreateLink); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = CreateLink.__proto__ || (0, _getPrototypeOf2.default)(CreateLink)).call.apply(_ref, [this].concat(args))), _this), _this.state = { + description: '', + title: '', + image: '', + price: 0, + fullPrice: 0, + loading: false + }, _this.uploadFile = function () { + var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(e) { + var files, data, res, file; + return _regenerator2.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + files = e.currentTarget.files; + data = new FormData(); + + data.append('data', files[0]); + + // use the file endpoint + _context.next = 5; + return fetch('https://api.graph.cool/file/v1/cj5xz8szs28930145gct82bdj', { + method: 'POST', + body: data + }); + + case 5: + res = _context.sent; + _context.next = 8; + return res.json(); + + case 8: + file = _context.sent; + + console.log(file); + _this.setState({ image: file.id }); + + case 11: + case 'end': + return _context.stop(); + } + } + }, _callee, _this2); + })); + + return function (_x) { + return _ref2.apply(this, arguments); + }; + }(), _this._createLink = function () { + var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(e) { + var _this$state, description, title, image, price, fullPrice, res; + + return _regenerator2.default.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + e.preventDefault(); + // pull the values from state + _this$state = _this.state, description = _this$state.description, title = _this$state.title, image = _this$state.image, price = _this$state.price, fullPrice = _this$state.fullPrice; + // create a mutation + // TODO: handle any errors + // turn loading on + + _this.setState({ loading: true }); + _context2.next = 5; + return _this.props.createLinkMutation({ + // pass in those variables from state + variables: { + description: description, + title: title, + price: parseInt(price), + fullPrice: fullPrice, + imageId: image + } + }); + + case 5: + res = _context2.sent; + + _this.setState({ loading: false }); + + case 7: + case 'end': + return _context2.stop(); + } + } + }, _callee2, _this2); + })); + + return function (_x2) { + return _ref3.apply(this, arguments); + }; + }(), _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); + } + + (0, _createClass3.default)(CreateLink, [{ + key: 'componentWillReceiveProps', + value: function componentWillReceiveProps(nextProps) { + console.log(nextProps); + } + }, { + key: 'render', + value: function render() { + var _this3 = this; + + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 38 + } + }, this.state.loading ? 'LOADING...' : 'Ready!', _react2.default.createElement('form', { onSubmit: this._createLink, __source: { + fileName: _jsxFileName, + lineNumber: 40 + } + }, _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 41 + } + }, 'Image', _react2.default.createElement('input', { onChange: this.uploadFile, type: 'file', __source: { + fileName: _jsxFileName, + lineNumber: 43 + } + })), _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 45 + } + }, 'Title', _react2.default.createElement('input', { value: this.state.title, onChange: function onChange(e) { + return _this3.setState({ title: e.target.value }); + }, type: 'text', placeholder: 'A description for the link', __source: { + fileName: _jsxFileName, + lineNumber: 46 + } + })), _react2.default.createElement('label', { + __source: { + fileName: _jsxFileName, + lineNumber: 48 + } + }, 'Price', _react2.default.createElement('input', { type: 'number', min: '0', value: this.state.price, onChange: function onChange(e) { + return _this3.setState({ price: e.target.value }); + }, __source: { + fileName: _jsxFileName, + lineNumber: 48 + } + })), _react2.default.createElement('textarea', { + value: this.state.description, + onChange: function onChange(e) { + return _this3.setState({ description: e.target.value }); + }, + type: 'text', + placeholder: 'The desc for this item', + __source: { + fileName: _jsxFileName, + lineNumber: 49 + } + }), _react2.default.createElement('button', { type: 'submit', __source: { + fileName: _jsxFileName, + lineNumber: 55 + } + }, 'Submit'))); + } + }]); + + return CreateLink; +}(_react.Component); +// When we submit this mutation, we need to update our store - we have a few ways to do that: +// One - we can go nucular and run refetchQueries() which will just go get everything - this is easy, but at the cost of efficiency. + + +exports.default = (0, _reactApollo.graphql)(_queries.CREATE_LINK_MUTATION, { name: 'createLinkMutation', options: { + // Easy, but slow + // refetchQueries: ['AllLinksQuery'] + // This is much Better / efficient + // Notice how the variable is called createItem - that is because createItem is the name of the query! + update: function update(proxy, _ref4) { + var createItem = _ref4.data.createItem; + + console.log({ createItem: createItem, ALL_ITEMS_QUERY: _queries.ALL_ITEMS_QUERY }); + var data = proxy.readQuery({ query: _queries.ALL_ITEMS_QUERY }); + // data is our store, allItems is our sub-"state", it's just an array. We can just add it to + data.allItems.unshift(createItem); + // and then "set state", so it will update on the page. This will update the cache for us! + proxy.writeQuery({ query: _queries.ALL_ITEMS_QUERY, data: data }); + } + } })(CreateLink); + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/CreateItem.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/CreateItem.js"); } } })(); + +/***/ }), + +/***/ 644: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _auth0Lock = __webpack_require__(645); + +var _auth0Lock2 = _interopRequireDefault(_auth0Lock); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/LoginAuth0.js'; + + +var LoginAuth0 = function (_Component) { + (0, _inherits3.default)(LoginAuth0, _Component); + + function LoginAuth0(props) { + (0, _classCallCheck3.default)(this, LoginAuth0); + + var _this = (0, _possibleConstructorReturn3.default)(this, (LoginAuth0.__proto__ || (0, _getPrototypeOf2.default)(LoginAuth0)).call(this, props)); + + _this.createUser = function () { + var variables = { + idToken: window.localStorage.getItem("auth0IdToken"), + emailAddress: 'wesbos@gmail.com', + name: 'Hardcoded Wes' + }; + // TODO - make a createUser function + _this.props.createUser({ variables: variables }).then(function (response) { + _this.props.history.replace("/"); + }).catch(function (e) { + console.error(e); + _this.props.history.replace("/"); + }); + }; + + _this._showLogin = function () { + _this._lock.show(); + }; + + if (typeof window === 'undefined') return (0, _possibleConstructorReturn3.default)(_this); + var redirectUrl = 'http://localhost:3000/signup'; + console.log(redirectUrl); + _this._lock = new _auth0Lock2.default('l851ev2q8X48wf56eGLjIWFbMwwbvWPE', 'wesbos.auth0.com', { + auth: { + redirect: false + } + }); + return _this; + } + + (0, _createClass3.default)(LoginAuth0, [{ + key: 'componentDidMount', + value: function componentDidMount() { + console.log('MOUNT'); + this._lock.on('authenticated', function (authResult) { + console.log('HIIIIIIII'); + window.localStorage.setItem('auth0IdToken', authResult.idToken); + console.log('Done!', authResult); + }); + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 51 + } + }, _react2.default.createElement('button', { onClick: this._showLogin, __source: { + fileName: _jsxFileName, + lineNumber: 52 + } + }, 'Log in with Auth0 ')); + } + }]); + + return LoginAuth0; +}(_react.Component); + +exports.default = LoginAuth0; + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/LoginAuth0.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/LoginAuth0.js"); } } })(); + +/***/ }), + +/***/ 677: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _taggedTemplateLiteral2 = __webpack_require__(576); + +var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _Header = __webpack_require__(872); + +var _Header2 = _interopRequireDefault(_Header); + +var _Meta = __webpack_require__(873); + +var _Meta2 = _interopRequireDefault(_Meta); + +var _withData = __webpack_require__(586); + +var _withData2 = _interopRequireDefault(_withData); + +var _Nav = __webpack_require__(678); + +var _Nav2 = _interopRequireDefault(_Nav); + +var _styledComponents = __webpack_require__(641); + +var _styledComponents2 = _interopRequireDefault(_styledComponents); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/Page.js'; + +var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n font-family: sans-serif;\n color: #303030;\n background: #efc600;\n padding: 100px;\n'], ['\n font-family: sans-serif;\n color: #303030;\n background: #efc600;\n padding: 100px;\n']); + +var StyledPage = _styledComponents2.default.div(_templateObject); + +var Page = function Page(_ref) { + var children = _ref.children; + return _react2.default.createElement(StyledPage, { className: 'main', __source: { + fileName: _jsxFileName, + lineNumber: 15 + } + }, _react2.default.createElement(_Meta2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 16 + } + }), _react2.default.createElement(_Header2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 17 + } + }), _react2.default.createElement(_Nav2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 18 + } + }), _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 19 + } + }, children)); +}; + +exports.default = (0, _withData2.default)(Page); + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/Page.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/Page.js"); } } })(); + +/***/ }), + +/***/ 678: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _link = __webpack_require__(636); + +var _link2 = _interopRequireDefault(_link); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = "/Users/wesbos/Sites/advanced-react/examples/next/components/Nav.js"; + +exports.default = function () { + return _react2.default.createElement("ul", { + __source: { + fileName: _jsxFileName, + lineNumber: 4 + } + }, _react2.default.createElement(_link2.default, { href: "/", __source: { + fileName: _jsxFileName, + lineNumber: 5 + } + }, _react2.default.createElement("a", { + __source: { + fileName: _jsxFileName, + lineNumber: 5 + } + }, "Home")), _react2.default.createElement(_link2.default, { href: "/signup/", __source: { + fileName: _jsxFileName, + lineNumber: 6 + } + }, _react2.default.createElement("a", { + __source: { + fileName: _jsxFileName, + lineNumber: 6 + } + }, "Signup")), _react2.default.createElement(_link2.default, { href: "/orders/", __source: { + fileName: _jsxFileName, + lineNumber: 7 + } + }, _react2.default.createElement("a", { + __source: { + fileName: _jsxFileName, + lineNumber: 7 + } + }, "Orders"))); +}; + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/Nav.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/Nav.js"); } } })(); + +/***/ }), + +/***/ 723: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process, global) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = initApollo; + +var _reactApollo = __webpack_require__(547); + +var _isomorphicFetch = __webpack_require__(724); + +var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var apolloClient = null; + +// Polyfill fetch() on the server (used by apollo-client) +if (!process.browser) { + global.fetch = _isomorphicFetch2.default; +} + +function create(initialState) { + + var networkInterface = (0, _reactApollo.createNetworkInterface)({ + uri: 'https://api.graph.cool/simple/v1/cj5xz8szs28930145gct82bdj', // Server URL (must be absolute) + opts: { // Additional fetch() options like `credentials` or `headers` + credentials: 'same-origin' + } + }); + + // use the auth0IdToken in localStorage for authorized requests + networkInterface.use([{ + applyMiddleware: function applyMiddleware(req, next) { + if (!req.options.headers) { + req.options.headers = {}; + } + + // get the authentication token from local storage if it exists + if (typeof localStorage !== 'undefined' && localStorage.getItem("auth0IdToken")) { + req.options.headers.authorization = 'Bearer ' + localStorage.getItem("auth0IdToken"); + } + next(); + } + }]); + + return new _reactApollo.ApolloClient({ + initialState: initialState, + ssrMode: !process.browser, // Disables forceFetch on the server (so queries are only run once) + networkInterface: networkInterface + }); +} + +function initApollo(initialState) { + // Make sure to create a new client for every server-side request so that data + // isn't shared between connections (which would be bad) + if (!process.browser) { + return create(initialState); + } + + // Reuse client on the client-side + if (!apolloClient) { + apolloClient = create(initialState); + } + + return apolloClient; +} + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/lib/initApollo.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/lib/initApollo.js"); } } })(); +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(54), __webpack_require__(53))) + +/***/ }), + +/***/ 731: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -681,7 +1094,7 @@ var _asyncToGenerator2 = __webpack_require__(76); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); -var _defineProperty2 = __webpack_require__(646); +var _defineProperty2 = __webpack_require__(732); var _defineProperty3 = _interopRequireDefault(_defineProperty2); @@ -713,9 +1126,9 @@ var _react = __webpack_require__(11); var _react2 = _interopRequireDefault(_react); -var _reactApollo = __webpack_require__(540); +var _reactApollo = __webpack_require__(547); -var _queries = __webpack_require__(549); +var _queries = __webpack_require__(557); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -871,7 +1284,7 @@ exports.default = ComponentWithMutations; /***/ }), -/***/ 647: +/***/ 733: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -882,11 +1295,11 @@ Object.defineProperty(exports, "__esModule", { }); exports.itemDetails = undefined; -var _taggedTemplateLiteral2 = __webpack_require__(562); +var _taggedTemplateLiteral2 = __webpack_require__(576); var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); -var _reactApollo = __webpack_require__(540); +var _reactApollo = __webpack_require__(547); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -898,7 +1311,7 @@ var itemDetails = exports.itemDetails = (0, _reactApollo.gql)(_templateObject); /***/ }), -/***/ 666: +/***/ 750: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -908,10 +1321,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _extends2 = __webpack_require__(112); - -var _extends3 = _interopRequireDefault(_extends2); - var _regenerator = __webpack_require__(75); var _regenerator2 = _interopRequireDefault(_regenerator); @@ -944,13 +1353,13 @@ var _react = __webpack_require__(11); var _react2 = _interopRequireDefault(_react); -var _reactStripeCheckout = __webpack_require__(667); +var _reactStripeCheckout = __webpack_require__(751); var _reactStripeCheckout2 = _interopRequireDefault(_reactStripeCheckout); -var _queries = __webpack_require__(549); +var _queries = __webpack_require__(557); -var _reactApollo = __webpack_require__(540); +var _reactApollo = __webpack_require__(547); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -974,24 +1383,28 @@ var TakeMyMoney = function (_Component) { return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = TakeMyMoney.__proto__ || (0, _getPrototypeOf2.default)(TakeMyMoney)).call.apply(_ref, [this].concat(args))), _this), _this.onToken = function () { var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(res) { - var token, charge; + var token, userId, itemId, charge; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: token = res.id; + userId = _this.props.currentUserQuery.user.id; + itemId = _this.props.id; console.log('Going to make a purchase with ' + token); - _context.next = 4; - return _this.props.createOrder({ variables: { token: token } }); + console.log('THe person that bought this was ' + userId); + console.log('The item id is ' + itemId); + _context.next = 8; + return _this.props.createOrder({ variables: { token: token, userId: userId, itemId: itemId } }); - case 4: + case 8: charge = _context.sent; alert('Back from the charge! ' + charge.id); console.log(charge); - case 7: + case 11: case 'end': return _context.stop(); } @@ -1008,31 +1421,41 @@ var TakeMyMoney = function (_Component) { (0, _createClass3.default)(TakeMyMoney, [{ key: 'render', value: function render() { - return ( - // ... - _react2.default.createElement(_reactStripeCheckout2.default, (0, _extends3.default)({}, this.props, { - token: this.onToken, - stripeKey: 'pk_lclTtThFp8CnO3QtEZSd8HA9mFUps', - currency: 'USD', - __source: { - fileName: _jsxFileName, - lineNumber: 19 - } - }), this.props.children) - ); + var user = this.props.currentUserQuery.user || {}; + var email = user.email || ''; + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 24 + } + }, _react2.default.createElement(_reactStripeCheckout2.default, { + amount: this.props.amount, + name: this.props.name, + description: this.props.description, + token: this.onToken, + stripeKey: 'pk_lclTtThFp8CnO3QtEZSd8HA9mFUps', + currency: 'USD', + email: email, + __source: { + fileName: _jsxFileName, + lineNumber: 25 + } + }, this.props.children)); } }]); return TakeMyMoney; }(_react.Component); -exports.default = (0, _reactApollo.graphql)(_queries.CREATE_ORDER_MUTATION, { name: 'createOrder' })(TakeMyMoney); +var userEnhancer = (0, _reactApollo.graphql)(_queries.CURRENT_USER_QUERY, { name: 'currentUserQuery' }); +var createOrderEnhancer = (0, _reactApollo.graphql)(_queries.CREATE_ORDER_MUTATION, { name: 'createOrder' }); +exports.default = (0, _reactApollo.compose)(userEnhancer, createOrderEnhancer)(TakeMyMoney); ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/TakeMyMoney.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/TakeMyMoney.js"); } } })(); /***/ }), -/***/ 668: +/***/ 752: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1050,7 +1473,7 @@ exports.default = function (amount) { /***/ }), -/***/ 669: +/***/ 753: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1060,13 +1483,27 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _regenerator = __webpack_require__(75); +exports.default = function (image) { + var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 300; + var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300; -var _regenerator2 = _interopRequireDefault(_regenerator); + if (!image || !image.secret) return ''; + return 'https://images.graph.cool/v1/cj5xz8szs28930145gct82bdj/' + image.secret + '/' + width + 'x' + height; +}; -var _asyncToGenerator2 = __webpack_require__(76); + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/lib/image.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/lib/image.js"); } } })(); -var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); +/***/ }), + +/***/ 872: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); var _getPrototypeOf = __webpack_require__(46); @@ -1092,207 +1529,284 @@ var _react = __webpack_require__(11); var _react2 = _interopRequireDefault(_react); -var _reactApollo = __webpack_require__(540); +var _reactApollo = __webpack_require__(547); -var _queries = __webpack_require__(549); +var _queries = __webpack_require__(557); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/CreateItem.js'; +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/Header.js'; -var CreateLink = function (_Component) { - (0, _inherits3.default)(CreateLink, _Component); +var Header = function (_Component) { + (0, _inherits3.default)(Header, _Component); - function CreateLink() { - var _ref, - _this2 = this; + function Header() { + (0, _classCallCheck3.default)(this, Header); - var _temp, _this, _ret; + return (0, _possibleConstructorReturn3.default)(this, (Header.__proto__ || (0, _getPrototypeOf2.default)(Header)).apply(this, arguments)); + } - (0, _classCallCheck3.default)(this, CreateLink); + (0, _createClass3.default)(Header, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // This fetches the new data, but doesn't populate the user via props + // this.props.currentUserQuery.refetch(); + // This fetches the new data, and populates the user via props + setTimeout(this.props.currentUserQuery.refetch, 1); + } + }, { + key: 'render', + value: function render() { + console.log(this.props.currentUserQuery.user); + var user = this.props.currentUserQuery.user || {}; + var _user$email = user.email, + email = _user$email === undefined ? '' : _user$email; - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 20 + } + }, _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 21 + } + }, email, ' I\'m the header!')); } + }]); - return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = CreateLink.__proto__ || (0, _getPrototypeOf2.default)(CreateLink)).call.apply(_ref, [this].concat(args))), _this), _this.state = { - description: '', - title: '', - image: '', - loading: false - }, _this.uploadFile = function () { - var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(e) { - var files, data, res, file; - return _regenerator2.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - files = e.currentTarget.files; - data = new FormData(); + return Header; +}(_react.Component); - data.append('data', files[0]); +var userEnhancer = (0, _reactApollo.graphql)(_queries.CURRENT_USER_QUERY, { name: 'currentUserQuery' }); +exports.default = (0, _reactApollo.compose)(userEnhancer)(Header); - // use the file endpoint - _context.next = 5; - return fetch('https://api.graph.cool/file/v1/cj5xz8szs28930145gct82bdj', { - method: 'POST', - body: data - }); + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/Header.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/Header.js"); } } })(); - case 5: - res = _context.sent; - _context.next = 8; - return res.json(); +/***/ }), - case 8: - file = _context.sent; +/***/ 873: +/***/ (function(module, exports, __webpack_require__) { - console.log(file); - _this.setState({ image: file.id }); +"use strict"; - case 11: - case 'end': - return _context.stop(); - } - } - }, _callee, _this2); - })); - return function (_x) { - return _ref2.apply(this, arguments); - }; - }(), _this._createLink = function () { - var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(e) { - var _this$state, description, title, image, res; +Object.defineProperty(exports, "__esModule", { + value: true +}); - return _regenerator2.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - e.preventDefault(); - // pull the values from state - _this$state = _this.state, description = _this$state.description, title = _this$state.title, image = _this$state.image; - // create a mutation - // TODO: handle any errors - // turn loading on +var _react = __webpack_require__(11); - _this.setState({ loading: true }); - _context2.next = 5; - return _this.props.createLinkMutation({ - // pass in those variables from state - variables: { - description: description, - title: title, - imageId: image - } - }); +var _react2 = _interopRequireDefault(_react); - case 5: - res = _context2.sent; +var _head = __webpack_require__(226); - _this.setState({ loading: false }); +var _head2 = _interopRequireDefault(_head); - case 7: - case 'end': - return _context2.stop(); - } - } - }, _callee2, _this2); - })); +var _index = __webpack_require__(71); - return function (_x2) { - return _ref3.apply(this, arguments); - }; - }(), _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); - } +var _index2 = _interopRequireDefault(_index); - (0, _createClass3.default)(CreateLink, [{ - key: 'componentWillReceiveProps', - value: function componentWillReceiveProps(nextProps) { - console.log(nextProps); +var _Nav = __webpack_require__(678); + +var _Nav2 = _interopRequireDefault(_Nav); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/Meta.js'; + +exports.default = function () { + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 6 } - }, { + }, _react2.default.createElement(_head2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 7 + } + }, _react2.default.createElement('meta', { name: 'viewport', content: 'width=device-width, initial-scale=1', __source: { + fileName: _jsxFileName, + lineNumber: 8 + } + }), _react2.default.createElement('meta', { charSet: 'utf-8', __source: { + fileName: _jsxFileName, + lineNumber: 9 + } + }), _react2.default.createElement(_Nav2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 10 + } + }), _react2.default.createElement('link', { rel: 'shortcut icon', href: 'https://wesbos.com/wp-content/themes/wb2014/i/crown-yellow-small.png', __source: { + fileName: _jsxFileName, + lineNumber: 11 + } + }), _react2.default.createElement('link', { rel: 'stylesheet', href: 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css', __source: { + fileName: _jsxFileName, + lineNumber: 12 + } + }), _react2.default.createElement('title', { + __source: { + fileName: _jsxFileName, + lineNumber: 13 + } + }, 'Sick Fits'))); +}; + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/Meta.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/Meta.js"); } } })(); + +/***/ }), + +/***/ 877: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(878); + + +/***/ }), + +/***/ 878: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(__resourceQuery) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _Items = __webpack_require__(635); + +var _Items2 = _interopRequireDefault(_Items); + +var _CreateItem = __webpack_require__(642); + +var _CreateItem2 = _interopRequireDefault(_CreateItem); + +var _Count = __webpack_require__(879); + +var _Count2 = _interopRequireDefault(_Count); + +var _LoginAuth = __webpack_require__(644); + +var _LoginAuth2 = _interopRequireDefault(_LoginAuth); + +var _Header = __webpack_require__(872); + +var _Header2 = _interopRequireDefault(_Header); + +var _Page = __webpack_require__(677); + +var _Page2 = _interopRequireDefault(_Page); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/pages/index.js?entry'; + + +var Home = function (_Component) { + (0, _inherits3.default)(Home, _Component); + + function Home() { + (0, _classCallCheck3.default)(this, Home); + + return (0, _possibleConstructorReturn3.default)(this, (Home.__proto__ || (0, _getPrototypeOf2.default)(Home)).apply(this, arguments)); + } + + (0, _createClass3.default)(Home, [{ key: 'render', value: function render() { - var _this3 = this; - - return _react2.default.createElement('div', { + return _react2.default.createElement(_Page2.default, { __source: { fileName: _jsxFileName, - lineNumber: 36 - } - }, this.state.loading ? 'LOADING...' : 'Ready!', _react2.default.createElement('form', { onSubmit: this._createLink, __source: { - fileName: _jsxFileName, - lineNumber: 38 + lineNumber: 12 } - }, _react2.default.createElement('p', { + }, _react2.default.createElement(_LoginAuth2.default, { __source: { fileName: _jsxFileName, - lineNumber: 39 - } - }, 'Image', _react2.default.createElement('input', { onChange: this.uploadFile, type: 'file', __source: { - fileName: _jsxFileName, - lineNumber: 41 + lineNumber: 13 } - })), _react2.default.createElement('p', { + }), _react2.default.createElement(_Count2.default, { __source: { fileName: _jsxFileName, - lineNumber: 43 + lineNumber: 14 } - }, 'Title', _react2.default.createElement('input', { value: this.state.title, onChange: function onChange(e) { - return _this3.setState({ title: e.target.value }); - }, type: 'text', placeholder: 'A description for the link', __source: { - fileName: _jsxFileName, - lineNumber: 44 - } - })), _react2.default.createElement('textarea', { - value: this.state.description, - onChange: function onChange(e) { - return _this3.setState({ description: e.target.value }); - }, - type: 'text', - placeholder: 'The desc for this item', + }), _react2.default.createElement(_CreateItem2.default, { __source: { fileName: _jsxFileName, - lineNumber: 46 + lineNumber: 15 } - }), _react2.default.createElement('button', { type: 'submit', __source: { + }), _react2.default.createElement(_Items2.default, { + __source: { fileName: _jsxFileName, - lineNumber: 52 + lineNumber: 16 } - }, 'Submit'))); + })); } }]); - return CreateLink; + return Home; }(_react.Component); -// When we submit this mutation, we need to update our store - we have a few ways to do that: -// One - we can go nucular and run refetchQueries() which will just go get everything - this is easy, but at the cost of efficiency. +exports.default = Home; -exports.default = (0, _reactApollo.graphql)(_queries.CREATE_LINK_MUTATION, { name: 'createLinkMutation', options: { - // Easy, but slow - // refetchQueries: ['AllLinksQuery'] - // This is much Better / efficient - // Notice how the variable is called createItem - that is because createItem is the name of the query! - update: function update(proxy, _ref4) { - var createItem = _ref4.data.createItem; + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/pages/index.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/pages/index.js"); } } })(); + (function (Component, route) { + if (false) return + if (false) return - console.log({ createItem: createItem, ALL_ITEMS_QUERY: _queries.ALL_ITEMS_QUERY }); - var data = proxy.readQuery({ query: _queries.ALL_ITEMS_QUERY }); - // data is our store, allItems is our sub-"state", it's just an array. We can just add it to - data.allItems.unshift(createItem); - // and then "set state", so it will update on the page. This will update the cache for us! - proxy.writeQuery({ query: _queries.ALL_ITEMS_QUERY, data: data }); - } - } })(CreateLink); + var qs = __webpack_require__(70) + var params = qs.parse(__resourceQuery.slice(1)) + if (params.entry == null) return - ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/CreateItem.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/CreateItem.js"); } } })(); + module.hot.accept() + Component.__route = route + + if (module.hot.status() === 'idle') return + + var components = next.router.components + for (var r in components) { + if (!components.hasOwnProperty(r)) continue + + if (components[r].Component.__route === route) { + next.router.update(r, Component) + } + } + })(typeof __webpack_exports__ !== 'undefined' ? __webpack_exports__.default : (module.exports.default || module.exports), "/") + +/* WEBPACK VAR INJECTION */}.call(exports, "?entry")) /***/ }), -/***/ 670: +/***/ 879: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1327,9 +1841,9 @@ var _react = __webpack_require__(11); var _react2 = _interopRequireDefault(_react); -var _reactApollo = __webpack_require__(540); +var _reactApollo = __webpack_require__(547); -var _queries = __webpack_require__(549); +var _queries = __webpack_require__(557); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -1400,8 +1914,8 @@ exports.default = (0, _reactApollo.graphql)(_queries.ALL_ITEMS_QUERY, { name: 'a /***/ }) -},[591]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlcy9wYWdlcy9pbmRleC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3F1ZXJpZXMvaW5kZXguanM/MzU0MjA4YSIsIndlYnBhY2s6Ly8vLi9wYWdlcz8zNTQyMDhhIiwid2VicGFjazovLy8uL2xpYi93aXRoRGF0YS5qcz8zNTQyMDhhIiwid2VicGFjazovLy8uL2xpYi9pbml0QXBvbGxvLmpzPzM1NDIwOGEiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9JdGVtcy5qcz8zNTQyMDhhIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvVXBkYXRlSXRlbS5qcz8zNTQyMDhhIiwid2VicGFjazovLy8uL3F1ZXJpZXMvZnJhZ21lbnRzLmpzPzM1NDIwOGEiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9UYWtlTXlNb25leS5qcz8zNTQyMDhhIiwid2VicGFjazovLy8uL2xpYi9mb3JtYXRNb25leS5qcz8zNTQyMDhhIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvQ3JlYXRlSXRlbS5qcz8zNTQyMDhhIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvQ291bnQuanM/MzU0MjA4YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBncWwgfSBmcm9tICdyZWFjdC1hcG9sbG8nXG5pbXBvcnQgeyBpdGVtRGV0YWlscyB9IGZyb20gJy4vZnJhZ21lbnRzJztcblxuZXhwb3J0IGNvbnN0IENSRUFURV9MSU5LX01VVEFUSU9OID0gZ3FsYFxuICAke2l0ZW1EZXRhaWxzfVxuICBtdXRhdGlvbiBDcmVhdGVMaW5rTXV0YXRpb24oJGRlc2NyaXB0aW9uOiBTdHJpbmchLCAkdGl0bGU6IFN0cmluZyEsICRpbWFnZUlkOiBJRCkge1xuICAgIGNyZWF0ZUl0ZW0oXG4gICAgICBkZXNjcmlwdGlvbjogJGRlc2NyaXB0aW9uLFxuICAgICAgdGl0bGU6ICR0aXRsZSxcbiAgICAgIGltYWdlSWQ6ICRpbWFnZUlkXG4gICAgKSB7XG4gICAgICAuLi5pdGVtRGV0YWlsc1xuICAgIH1cbiAgfVxuYFxuXG5leHBvcnQgY29uc3QgQ1JFQVRFX09SREVSX01VVEFUSU9OID0gZ3FsYFxuICBtdXRhdGlvbiBDcmVhdGVPcmRlck11dGF0aW9uKCR0b2tlbjogU3RyaW5nISkge1xuICAgIGNyZWF0ZU9yZGVyKHRva2VuOiAkdG9rZW4pIHtcbiAgICAgIGlkLFxuICAgICAgdG9rZW4sXG4gICAgICBjaGFyZ2UsXG4gICAgICBhbW91bnQsXG4gICAgfVxuICB9XG5gO1xuXG5cbmV4cG9ydCBjb25zdCBBTExfSVRFTVNfUVVFUlkgPSBncWxgXG4gICMgSW1wb3J0IHRoZSBGcmFnbWVudFxuICAke2l0ZW1EZXRhaWxzfVxuICBxdWVyeSBBbGxMaW5rc1F1ZXJ5IHtcbiAgICBhbGxJdGVtcyhvcmRlckJ5OiBjcmVhdGVkQXRfREVTQykge1xuICAgICAgIyBVc2UgdGhhdCBmcmFnbWVudCBieSBpdCdzIG5hbWUgKGV2ZW4gdGhvdWdoIGl0IHRoZSBzYW1lIGFzIHRoZSB2YXJpYWJsZSlcbiAgICAgIC4uLml0ZW1EZXRhaWxzXG4gICAgfVxuICB9XG5gXG5cbmV4cG9ydCBjb25zdCBTSU5HTEVfTElOS19RVUVSWSA9IGdxbGBcbiAgJHtpdGVtRGV0YWlsc31cbiAgcXVlcnkgRmluZEl0ZW0oJGlkOiBJRCEpIHtcbiAgICBJdGVtKGlkOiAkaWQpIHtcbiAgICAgIC4uLml0ZW1EZXRhaWxzXG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgREVMRVRFX0lURU1fTVVUQVRJT04gPSBncWxgXG4gIG11dGF0aW9uIERlbHRlSXRlbSgkaWQ6IElEISkge1xuICAgIGRlbGV0ZUl0ZW0oaWQ6ICRpZCkge1xuICAgICAgaWQsXG4gICAgICB0aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfVxuICB9XG5gXG5cbmV4cG9ydCBjb25zdCBVUERBVEVfTElOS19NVVRBVElPTiA9IGdxbGBcbiAgJHtpdGVtRGV0YWlsc31cbiAgbXV0YXRpb24gVXBkYXRlSXRlbSgkaWQ6IElEISwgJHRpdGxlOiBTdHJpbmchLCAkZGVzY3JpcHRpb246IFN0cmluZyEsICRwcmljZTogSW50ISwgJGZ1bGxQcmljZTogSW50ISkge1xuICAgIHVwZGF0ZUl0ZW0oXG4gICAgICBpZDogJGlkLFxuICAgICAgZGVzY3JpcHRpb246ICRkZXNjcmlwdGlvbixcbiAgICAgIHRpdGxlOiAkdGl0bGUsXG4gICAgICBwcmljZTogJHByaWNlLFxuICAgICAgZnVsbFByaWNlOiAkZnVsbFByaWNlXG4gICAgKSB7XG4gICAgICAuLi5pdGVtRGV0YWlsc1xuICAgIH1cbiAgfVxuYFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcXVlcmllcy9pbmRleC5qcyIsImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB3aXRoRGF0YSBmcm9tICcuLi9saWIvd2l0aERhdGEnO1xuaW1wb3J0IEl0ZW1zIGZyb20gJy4uL2NvbXBvbmVudHMvSXRlbXMnO1xuaW1wb3J0IENyZWF0ZUl0ZW0gZnJvbSAnLi4vY29tcG9uZW50cy9DcmVhdGVJdGVtJztcbmltcG9ydCBDb3VudCBmcm9tICcuLi9jb21wb25lbnRzL0NvdW50JztcblxuY2xhc3MgSG9tZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPENvdW50Lz5cbiAgICAgICAgPENyZWF0ZUl0ZW0gLz5cbiAgICAgICAgPEl0ZW1zPjwvSXRlbXM+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aERhdGEoSG9tZSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWdlcz9lbnRyeSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7IEFwb2xsb1Byb3ZpZGVyLCBnZXREYXRhRnJvbVRyZWUgfSBmcm9tICdyZWFjdC1hcG9sbG8nXG5pbXBvcnQgSGVhZCBmcm9tICduZXh0L2hlYWQnXG5pbXBvcnQgaW5pdEFwb2xsbyBmcm9tICcuL2luaXRBcG9sbG8nXG5cbi8vIEdldHMgdGhlIGRpc3BsYXkgbmFtZSBvZiBhIEpTWCBjb21wb25lbnQgZm9yIGRldiB0b29sc1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50RGlzcGxheU5hbWUgKENvbXBvbmVudCkge1xuICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdVbmtub3duJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb3NlZENvbXBvbmVudCA9PiB7XG4gIHJldHVybiBjbGFzcyBXaXRoRGF0YSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgc3RhdGljIGRpc3BsYXlOYW1lID0gYFdpdGhEYXRhKCR7Z2V0Q29tcG9uZW50RGlzcGxheU5hbWUoQ29tcG9zZWRDb21wb25lbnQpfSlgXG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIHNlcnZlclN0YXRlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWRcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZ2V0SW5pdGlhbFByb3BzIChjdHgpIHtcbiAgICAgIGxldCBzZXJ2ZXJTdGF0ZSA9IHt9XG5cbiAgICAgIC8vIEV2YWx1YXRlIHRoZSBjb21wb3NlZCBjb21wb25lbnQncyBnZXRJbml0aWFsUHJvcHMoKVxuICAgICAgbGV0IGNvbXBvc2VkSW5pdGlhbFByb3BzID0ge31cbiAgICAgIGlmIChDb21wb3NlZENvbXBvbmVudC5nZXRJbml0aWFsUHJvcHMpIHtcbiAgICAgICAgY29tcG9zZWRJbml0aWFsUHJvcHMgPSBhd2FpdCBDb21wb3NlZENvbXBvbmVudC5nZXRJbml0aWFsUHJvcHMoY3R4KVxuICAgICAgfVxuXG4gICAgICAvLyBSdW4gYWxsIEdyYXBoUUwgcXVlcmllcyBpbiB0aGUgY29tcG9uZW50IHRyZWVcbiAgICAgIC8vIGFuZCBleHRyYWN0IHRoZSByZXN1bHRpbmcgZGF0YVxuICAgICAgaWYgKCFwcm9jZXNzLmJyb3dzZXIpIHtcbiAgICAgICAgY29uc3QgYXBvbGxvID0gaW5pdEFwb2xsbygpXG4gICAgICAgIC8vIFByb3ZpZGUgdGhlIGB1cmxgIHByb3AgZGF0YSBpbiBjYXNlIGEgR3JhcGhRTCBxdWVyeSB1c2VzIGl0XG4gICAgICAgIGNvbnN0IHVybCA9IHtxdWVyeTogY3R4LnF1ZXJ5LCBwYXRobmFtZTogY3R4LnBhdGhuYW1lfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFJ1biBhbGwgR3JhcGhRTCBxdWVyaWVzXG4gICAgICAgICAgYXdhaXQgZ2V0RGF0YUZyb21UcmVlKFxuICAgICAgICAgICAgPEFwb2xsb1Byb3ZpZGVyIGNsaWVudD17YXBvbGxvfT5cbiAgICAgICAgICAgICAgPENvbXBvc2VkQ29tcG9uZW50IHVybD17dXJsfSB7Li4uY29tcG9zZWRJbml0aWFsUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0Fwb2xsb1Byb3ZpZGVyPlxuICAgICAgICAgIClcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBQcmV2ZW50IEFwb2xsbyBDbGllbnQgR3JhcGhRTCBlcnJvcnMgZnJvbSBjcmFzaGluZyBTU1IuXG4gICAgICAgICAgLy8gSGFuZGxlIHRoZW0gaW4gY29tcG9uZW50cyB2aWEgdGhlIGRhdGEuZXJyb3IgcHJvcDpcbiAgICAgICAgICAvLyBodHRwOi8vZGV2LmFwb2xsb2RhdGEuY29tL3JlYWN0L2FwaS1xdWVyaWVzLmh0bWwjZ3JhcGhxbC1xdWVyeS1kYXRhLWVycm9yXG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0RGF0YUZyb21UcmVlIGRvZXMgbm90IGNhbGwgY29tcG9uZW50V2lsbFVubW91bnRcbiAgICAgICAgLy8gaGVhZCBzaWRlIGVmZmVjdCB0aGVyZWZvcmUgbmVlZCB0byBiZSBjbGVhcmVkIG1hbnVhbGx5XG4gICAgICAgIEhlYWQucmV3aW5kKClcblxuICAgICAgICAvLyBFeHRyYWN0IHF1ZXJ5IGRhdGEgZnJvbSB0aGUgQXBvbGxvIHN0b3JlXG4gICAgICAgIGNvbnN0IHN0YXRlID0gYXBvbGxvLmdldEluaXRpYWxTdGF0ZSgpXG5cbiAgICAgICAgc2VydmVyU3RhdGUgPSB7XG4gICAgICAgICAgYXBvbGxvOiB7XG4gICAgICAgICAgICAvLyBPbmx5IGluY2x1ZGUgdGhlIEFwb2xsbyBkYXRhIHN0YXRlXG4gICAgICAgICAgICBkYXRhOiBzdGF0ZS5kYXRhXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlcnZlclN0YXRlLFxuICAgICAgICAuLi5jb21wb3NlZEluaXRpYWxQcm9wc1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpXG4gICAgICB0aGlzLmFwb2xsbyA9IGluaXRBcG9sbG8odGhpcy5wcm9wcy5zZXJ2ZXJTdGF0ZSlcbiAgICB9XG5cbiAgICByZW5kZXIgKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFwb2xsb1Byb3ZpZGVyIGNsaWVudD17dGhpcy5hcG9sbG99PlxuICAgICAgICAgIDxDb21wb3NlZENvbXBvbmVudCB7Li4udGhpcy5wcm9wc30gLz5cbiAgICAgICAgPC9BcG9sbG9Qcm92aWRlcj5cbiAgICAgIClcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2xpYi93aXRoRGF0YS5qcyIsImltcG9ydCB7IEFwb2xsb0NsaWVudCwgY3JlYXRlTmV0d29ya0ludGVyZmFjZSB9IGZyb20gJ3JlYWN0LWFwb2xsbydcbmltcG9ydCBmZXRjaCBmcm9tICdpc29tb3JwaGljLWZldGNoJ1xuXG5sZXQgYXBvbGxvQ2xpZW50ID0gbnVsbFxuXG4vLyBQb2x5ZmlsbCBmZXRjaCgpIG9uIHRoZSBzZXJ2ZXIgKHVzZWQgYnkgYXBvbGxvLWNsaWVudClcbmlmICghcHJvY2Vzcy5icm93c2VyKSB7XG4gIGdsb2JhbC5mZXRjaCA9IGZldGNoXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZSAoaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiBuZXcgQXBvbGxvQ2xpZW50KHtcbiAgICBpbml0aWFsU3RhdGUsXG4gICAgc3NyTW9kZTogIXByb2Nlc3MuYnJvd3NlciwgLy8gRGlzYWJsZXMgZm9yY2VGZXRjaCBvbiB0aGUgc2VydmVyIChzbyBxdWVyaWVzIGFyZSBvbmx5IHJ1biBvbmNlKVxuICAgIG5ldHdvcmtJbnRlcmZhY2U6IGNyZWF0ZU5ldHdvcmtJbnRlcmZhY2Uoe1xuICAgICAgdXJpOiAnaHR0cHM6Ly9hcGkuZ3JhcGguY29vbC9zaW1wbGUvdjEvY2o1eHo4c3pzMjg5MzAxNDVnY3Q4MmJkaicsIC8vIFNlcnZlciBVUkwgKG11c3QgYmUgYWJzb2x1dGUpXG4gICAgICBvcHRzOiB7IC8vIEFkZGl0aW9uYWwgZmV0Y2goKSBvcHRpb25zIGxpa2UgYGNyZWRlbnRpYWxzYCBvciBgaGVhZGVyc2BcbiAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbidcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0QXBvbGxvIChpbml0aWFsU3RhdGUpIHtcbiAgLy8gTWFrZSBzdXJlIHRvIGNyZWF0ZSBhIG5ldyBjbGllbnQgZm9yIGV2ZXJ5IHNlcnZlci1zaWRlIHJlcXVlc3Qgc28gdGhhdCBkYXRhXG4gIC8vIGlzbid0IHNoYXJlZCBiZXR3ZWVuIGNvbm5lY3Rpb25zICh3aGljaCB3b3VsZCBiZSBiYWQpXG4gIGlmICghcHJvY2Vzcy5icm93c2VyKSB7XG4gICAgcmV0dXJuIGNyZWF0ZShpbml0aWFsU3RhdGUpXG4gIH1cblxuICAvLyBSZXVzZSBjbGllbnQgb24gdGhlIGNsaWVudC1zaWRlXG4gIGlmICghYXBvbGxvQ2xpZW50KSB7XG4gICAgYXBvbGxvQ2xpZW50ID0gY3JlYXRlKGluaXRpYWxTdGF0ZSlcbiAgfVxuXG4gIHJldHVybiBhcG9sbG9DbGllbnRcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2xpYi9pbml0QXBvbGxvLmpzIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ3JhcGhxbCwgY29tcG9zZSB9IGZyb20gJ3JlYWN0LWFwb2xsbydcbmltcG9ydCBVcGRhdGVJdGVtIGZyb20gJy4vVXBkYXRlSXRlbSc7XG5pbXBvcnQgTGluayBmcm9tICduZXh0L2xpbmsnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgVGFrZU15TW9uZXkgZnJvbSAnLi9UYWtlTXlNb25leSc7XG5pbXBvcnQgZm9ybWF0TW9uZXkgZnJvbSAnLi4vbGliL2Zvcm1hdE1vbmV5JztcblxuaW1wb3J0IHsgQUxMX0lURU1TX1FVRVJZLCBERUxFVEVfSVRFTV9NVVRBVElPTiB9IGZyb20gJy4uL3F1ZXJpZXMnO1xuXG5jb25zdCBUaXRsZSA9IHN0eWxlZC5oMWBcbiAgZm9udC1zaXplOiA1MHB4O1xuYDtcblxuY2xhc3MgSXRlbUxpc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIHJlbmRlcigpIHtcblxuICAgIC8vIDFcbiAgICBpZiAodGhpcy5wcm9wcy5hbGxMaW5rc1F1ZXJ5ICYmIHRoaXMucHJvcHMuYWxsTGlua3NRdWVyeS5sb2FkaW5nKSB7XG4gICAgICByZXR1cm4gPGRpdj5Mb2FkaW5nPC9kaXY+XG4gICAgfVxuXG4gICAgLy8gMlxuICAgIGlmICh0aGlzLnByb3BzLmFsbExpbmtzUXVlcnkgJiYgdGhpcy5wcm9wcy5hbGxMaW5rc1F1ZXJ5LmVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnByb3BzLmFsbExpbmtzUXVlcnkuZXJyb3IpXG4gICAgICByZXR1cm4gPGRpdj5FcnJvcjwvZGl2PlxuICAgIH1cblxuICAgIC8vIDNcbiAgICBjb25zdCBpdGVtc1RvUmVuZGVyID0gdGhpcy5wcm9wcy5hbGxMaW5rc1F1ZXJ5LmFsbEl0ZW1zXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPFRpdGxlPkl0ZW1zIEZvciBTYWxlPC9UaXRsZT5cbiAgICAgICAge2l0ZW1zVG9SZW5kZXIubWFwKChpdGVtLGkpID0+IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIml0ZW1cIiBrZXk9e2l9PlxuICAgICAgICAgICAgPGhyLz5cbiAgICAgICAgICAgIHsgaXRlbS5pbWFnZSA/ICA8aW1nIHNyYz17YGh0dHBzOi8vaW1hZ2VzLmdyYXBoLmNvb2wvdjEvY2o1eHo4c3pzMjg5MzAxNDVnY3Q4MmJkai8ke2l0ZW0uaW1hZ2Uuc2VjcmV0fS8zMDB4MzAwYH0gLz4gOiBudWxsIH1cbiAgICAgICAgICAgIDxoMz57aXRlbS50aXRsZX08L2gzPlxuICAgICAgICAgICAgPHA+e2l0ZW0uZGVzY3JpcHRpb259PC9wPlxuICAgICAgICAgICAgPExpbmsgaHJlZj17e1xuICAgICAgICAgICAgICBwYXRobmFtZTogJy9hZG1pbi91cGRhdGUnLFxuICAgICAgICAgICAgICBxdWVyeTogeyBpZDogaXRlbS5pZCB9XG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgPGE+RWRpdCB7aXRlbS5pZH08L2E+XG4gICAgICAgICAgICA8L0xpbms+XG5cbiAgICAgICAgICAgIDxUYWtlTXlNb25leVxuICAgICAgICAgICAgICBhbW91bnQ9e2l0ZW0ucHJpY2V9XG4gICAgICAgICAgICAgIG5hbWU9e2l0ZW0udGl0bGV9IC8vIHRoZSBwb3AtaW4gaGVhZGVyIHRpdGxlXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtpdGVtLmRlc2NyaXB0aW9ufSAvLyB0aGUgcG9wLWluIGhlYWRlciBzdWJ0aXRsZVxuICAgICAgICAgICAgICBpbWFnZT17YGh0dHBzOi8vaW1hZ2VzLmdyYXBoLmNvb2wvdjEvY2o1eHo4c3pzMjg5MzAxNDVnY3Q4MmJkai8ke2l0ZW0uaW1hZ2Uuc2VjcmV0fS8zMDB4MzAwYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvbj5CdXkgZm9yIHtmb3JtYXRNb25leShpdGVtLnByaWNlKX08L2J1dHRvbj5cbiAgICAgICAgICAgIDwvVGFrZU15TW9uZXk+XG5cbiAgICAgICAgICAgIDxVcGRhdGVJdGVtIGlkPXtpdGVtLmlkfSAvPlxuXG4gICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHRoaXMucHJvcHMucmVtb3ZlSXRlbU11dGF0aW9uKHsgdmFyaWFibGVzOiB7IGlkOiBpdGVtLmlkIH19KX0+JnRpbWVzOyBEZWxldGUgaXRlbTwvYnV0dG9uPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbn1cblxuLy8gMVxuXG4vLyBXZSBleHBvcnQgdGhlIGdyYXBoUUwgSE9DIC0gdGhpcyB3aWxsIGZldGNoIHRoZSBkYXRhIGFuZCBpbmplY3QgaXQgaW50byB0aGUgSXRlbUxpc3QgY29tcGVvbnQgdmlhIHByb3BzXG5cbi8vIENyZWF0ZSBzb21lIEVuaGFuY2Vyc1xuY29uc3QgaXRlbXNFbmFobmNlciA9IGdyYXBocWwoQUxMX0lURU1TX1FVRVJZLCB7IG5hbWU6ICdhbGxMaW5rc1F1ZXJ5JyB9KTtcbmNvbnN0IGRlbGV0ZUl0ZW1FbmhhbmNlciA9IGdyYXBocWwoREVMRVRFX0lURU1fTVVUQVRJT04sIHtcbiAgbmFtZTogJ3JlbW92ZUl0ZW1NdXRhdGlvbicsXG4gIG9wdGlvbnM6IHtcbiAgICB1cGRhdGU6IChwcm94eSwgeyBkYXRhOiB7IGRlbGV0ZUl0ZW0gfSB9KSA9PiB7XG5cbiAgICAgIC8vIGdyYWIgdGhlIGRhdGEgZnJvbSBvdXIgY2FjaGVcbiAgICAgIGNvbnN0IGRhdGEgPSBwcm94eS5yZWFkUXVlcnkoeyBxdWVyeTogQUxMX0lURU1TX1FVRVJZIH0pO1xuXG4gICAgICAvLyBmaWx0ZXIgb3V0IHRoZSBkZWx0ZWQgaXRlbVxuICAgICAgZGF0YS5hbGxJdGVtcyA9IGRhdGEuYWxsSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gZGVsZXRlSXRlbS5pZCk7XG5cbiAgICAgIC8vIGFuZCB0aGVuIFwic2V0IHN0YXRlXCIgKHVwZGF0ZSBjYWNoZSksIHNvIGl0IHdpbGwgdXBkYXRlIHdoZXJlZXZlciB3ZSBoYXZlIHVzZWQgdGhpcyBkYXRhIG9uIHRoZSBwYWdlXG4gICAgICBwcm94eS53cml0ZVF1ZXJ5KHsgcXVlcnk6IEFMTF9JVEVNU19RVUVSWSwgZGF0YSB9KTtcblxuICAgIH0sXG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKGl0ZW1zRW5haG5jZXIsIGRlbGV0ZUl0ZW1FbmhhbmNlcikoSXRlbUxpc3QpXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb21wb25lbnRzL0l0ZW1zLmpzIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ3JhcGhxbCwgZ3FsLCBjb21wb3NlIH0gZnJvbSAncmVhY3QtYXBvbGxvJ1xuaW1wb3J0IHsgU0lOR0xFX0xJTktfUVVFUlksIFVQREFURV9MSU5LX01VVEFUSU9OIH0gZnJvbSAnLi4vcXVlcmllcyc7XG5cbmNsYXNzIFVwZGF0ZUxpbmsgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIHN0YXRlID0ge1xuICAgIC4uLnRoaXMucHJvcHMuZmluZEl0ZW0uSXRlbSxcbiAgfVxuXG4gIHNhdmVUb1N0YXRlID0gKGUpID0+IHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSwgdHlwZSB9ID0gZS50YXJnZXQ7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cblxuICAgICAgICA8aDI+RWRpdCB7dGhpcy5wcm9wcy5pZH08L2gyPlxuICAgICAgICB7IHRoaXMuc3RhdGUubG9hZGluZyA/ICdMT0FESU5HLi4uJyA6ICdSZWFkeSEnIH1cbiAgICAgICAgPGZvcm0gb25TdWJtaXQ9e3RoaXMuX2NyZWF0ZUxpbmt9PlxuXG4gICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJ0aXRsZVwiPlRpdGxlPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdmFsdWU9e3RoaXMuc3RhdGUudGl0bGV9IG5hbWU9XCJ0aXRsZVwiIG9uQ2hhbmdlPXt0aGlzLnNhdmVUb1N0YXRlfSB0eXBlPSd0ZXh0Jy8+XG5cbiAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImRlc2NyaXB0aW9uXCI+RGVzY3JpcHRpb248L2xhYmVsPlxuICAgICAgICAgIDx0ZXh0YXJlYSB2YWx1ZT17dGhpcy5zdGF0ZS5kZXNjcmlwdGlvbn0gbmFtZT1cImRlc2NyaXB0aW9uXCIgb25DaGFuZ2U9e3RoaXMuc2F2ZVRvU3RhdGV9PjwvdGV4dGFyZWE+XG5cbiAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInByaWNlXCI+UHJpY2U8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbmFtZT1cInByaWNlXCIgb25DaGFuZ2U9e3RoaXMuc2F2ZVRvU3RhdGV9IHZhbHVlPXt0aGlzLnN0YXRlLnByaWNlfSAvPlxuXG4gICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJmdWxsUHJpY2VcIj5GdWxsIFByaWNlPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG5hbWU9XCJmdWxsUHJpY2VcIiBvbkNoYW5nZT17dGhpcy5zYXZlVG9TdGF0ZX0gdmFsdWU9e3RoaXMuc3RhdGUuZnVsbFByaWNlfSAvPlxuXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCI+U2F2ZS4uLjwvYnV0dG9uPlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICBfY3JlYXRlTGluayA9IGFzeW5jIChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vIHB1bGwgdGhlIHZhbHVlcyBmcm9tIHN0YXRlXG4gICAgY29uc3QgeyBkZXNjcmlwdGlvbiwgdGl0bGUgfSA9IHRoaXMuc3RhdGVcbiAgICBjb25zdCB7IGlkIH0gPSB0aGlzLnByb3BzO1xuICAgIC8vIGNyZWF0ZSBhIG11dGF0aW9uXG4gICAgLy8gVE9ETzogaGFuZGxlIGFueSBlcnJvcnNcbiAgICAvLyB0dXJuIGxvYWRpbmcgb25cbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSB9KTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YXRlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnByb3BzLnVwZGF0ZUl0ZW0oe1xuICAgICAgLy8gcGFzcyBpbiB0aG9zZSB2YXJpYWJsZXMgZnJvbSBzdGF0ZVxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XG4gIH1cblxufVxuXG5jb25zdCBDb21wb25lbnRXaXRoTXV0YXRpb25zID0gY29tcG9zZShcbiAgLy8gRmlyc3QsIHF1ZXJ5IGZvciBnZXR0aW5nIHRoZSBsaW5rXG4gIGdyYXBocWwoU0lOR0xFX0xJTktfUVVFUlksIHtcbiAgICBuYW1lOiAnZmluZEl0ZW0nLFxuICAgIG9wdGlvbnM6ICh7IGlkIH0pID0+ICh7XG4gICAgICB2YXJpYWJsZXM6IHsgaWQgfVxuICAgIH0pXG4gIH0pLFxuICAvLyBTZWNvbmQsIHRoZSBtdXRhdGlvbiBmb3IgdXBkYXRpbmcgdGhlIGxpbmtcbiAgZ3JhcGhxbChVUERBVEVfTElOS19NVVRBVElPTiwgeyBuYW1lOiAndXBkYXRlSXRlbScgfSlcbikoVXBkYXRlTGluayk7XG5cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50V2l0aE11dGF0aW9ucztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvVXBkYXRlSXRlbS5qcyIsImltcG9ydCB7IGdxbCB9IGZyb20gJ3JlYWN0LWFwb2xsbyc7XG5cbmV4cG9ydCBjb25zdCBpdGVtRGV0YWlscyA9IGdxbGBcbiAgZnJhZ21lbnQgaXRlbURldGFpbHMgb24gSXRlbSB7XG4gICAgICBpZFxuICAgICAgdGl0bGVcbiAgICAgIHByaWNlXG4gICAgICBmdWxsUHJpY2VcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgICBpbWFnZSB7XG4gICAgICAgIGlkXG4gICAgICAgIHVybFxuICAgICAgICBzZWNyZXRcbiAgICAgIH1cbiAgfVxuYDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3F1ZXJpZXMvZnJhZ21lbnRzLmpzIiwiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFN0cmlwZUNoZWNrb3V0IGZyb20gJ3JlYWN0LXN0cmlwZS1jaGVja291dCc7XG5pbXBvcnQgeyBDUkVBVEVfT1JERVJfTVVUQVRJT04gfSBmcm9tICcuLi9xdWVyaWVzJztcbmltcG9ydCB7IGdyYXBocWwgfSBmcm9tICdyZWFjdC1hcG9sbG8nO1xuXG5cbmNsYXNzIFRha2VNeU1vbmV5IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgb25Ub2tlbiA9IGFzeW5jIChyZXMpID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IHJlcy5pZDtcbiAgICBjb25zb2xlLmxvZyhgR29pbmcgdG8gbWFrZSBhIHB1cmNoYXNlIHdpdGggJHt0b2tlbn1gKTtcbiAgICBjb25zdCBjaGFyZ2UgPSBhd2FpdCB0aGlzLnByb3BzLmNyZWF0ZU9yZGVyKHsgdmFyaWFibGVzOiB7IHRva2VuIH19KTtcbiAgICBhbGVydChgQmFjayBmcm9tIHRoZSBjaGFyZ2UhICR7Y2hhcmdlLmlkfWApO1xuICAgIGNvbnNvbGUubG9nKGNoYXJnZSk7XG5cbiAgfVxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vIC4uLlxuICAgICAgPFN0cmlwZUNoZWNrb3V0XG4gICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICB0b2tlbj17dGhpcy5vblRva2VufVxuICAgICAgICBzdHJpcGVLZXk9XCJwa19sY2xUdFRoRnA4Q25PM1F0RVpTZDhIQTltRlVwc1wiXG4gICAgICAgIGN1cnJlbmN5PVwiVVNEXCJcbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L1N0cmlwZUNoZWNrb3V0PlxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBncmFwaHFsKENSRUFURV9PUkRFUl9NVVRBVElPTiwgeyBuYW1lOiAnY3JlYXRlT3JkZXInIH0pKFRha2VNeU1vbmV5KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvVGFrZU15TW9uZXkuanMiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhbW91bnQpIHtcbiAgcmV0dXJuICckJyArICAoYW1vdW50IC8gMTAwKS50b0xvY2FsZVN0cmluZygpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbGliL2Zvcm1hdE1vbmV5LmpzIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ3JhcGhxbCwgZ3FsIH0gZnJvbSAncmVhY3QtYXBvbGxvJ1xuaW1wb3J0IHsgQUxMX0lURU1TX1FVRVJZLCBDUkVBVEVfTElOS19NVVRBVElPTiB9IGZyb20gJy4uL3F1ZXJpZXMnO1xuXG5jbGFzcyBDcmVhdGVMaW5rIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBzdGF0ZSA9IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgdGl0bGU6ICcnLFxuICAgIGltYWdlOiAnJyxcbiAgICBsb2FkaW5nOiBmYWxzZVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICBjb25zb2xlLmxvZyhuZXh0UHJvcHMpO1xuICB9XG5cbiAgdXBsb2FkRmlsZSA9IGFzeW5jIChlKSA9PiB7XG4gICAgY29uc3QgZmlsZXMgPSBlLmN1cnJlbnRUYXJnZXQuZmlsZXM7XG5cbiAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGRhdGEuYXBwZW5kKCdkYXRhJywgZmlsZXNbMF0pO1xuXG4gICAgLy8gdXNlIHRoZSBmaWxlIGVuZHBvaW50XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vYXBpLmdyYXBoLmNvb2wvZmlsZS92MS9jajV4ejhzenMyODkzMDE0NWdjdDgyYmRqJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBkYXRhXG4gICAgfSk7XG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgY29uc29sZS5sb2coZmlsZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGltYWdlOiBmaWxlLmlkIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICB7IHRoaXMuc3RhdGUubG9hZGluZyA/ICdMT0FESU5HLi4uJyA6ICdSZWFkeSEnIH1cbiAgICAgICAgPGZvcm0gb25TdWJtaXQ9e3RoaXMuX2NyZWF0ZUxpbmt9PlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgSW1hZ2VcbiAgICAgICAgICAgIDxpbnB1dCBvbkNoYW5nZT17dGhpcy51cGxvYWRGaWxlfSB0eXBlPSdmaWxlJy8+XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxwPlRpdGxlXG4gICAgICAgICAgICA8aW5wdXQgdmFsdWU9e3RoaXMuc3RhdGUudGl0bGV9IG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IHRpdGxlOiBlLnRhcmdldC52YWx1ZSB9KX0gdHlwZT0ndGV4dCcgcGxhY2Vob2xkZXI9J0EgZGVzY3JpcHRpb24gZm9yIHRoZSBsaW5rJy8+XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZGVzY3JpcHRpb259XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBkZXNjcmlwdGlvbjogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICB0eXBlPSd0ZXh0J1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI9J1RoZSBkZXNjIGZvciB0aGlzIGl0ZW0nXG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCI+U3VibWl0PC9idXR0b24+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIF9jcmVhdGVMaW5rID0gYXN5bmMgKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgLy8gcHVsbCB0aGUgdmFsdWVzIGZyb20gc3RhdGVcbiAgICBjb25zdCB7IGRlc2NyaXB0aW9uLCB0aXRsZSwgaW1hZ2UgfSA9IHRoaXMuc3RhdGVcbiAgICAvLyBjcmVhdGUgYSBtdXRhdGlvblxuICAgIC8vIFRPRE86IGhhbmRsZSBhbnkgZXJyb3JzXG4gICAgLy8gdHVybiBsb2FkaW5nIG9uXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IHRydWUgfSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5wcm9wcy5jcmVhdGVMaW5rTXV0YXRpb24oe1xuICAgICAgLy8gcGFzcyBpbiB0aG9zZSB2YXJpYWJsZXMgZnJvbSBzdGF0ZVxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgaW1hZ2VJZDogaW1hZ2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XG4gIH1cbn1cbi8vIFdoZW4gd2Ugc3VibWl0IHRoaXMgbXV0YXRpb24sIHdlIG5lZWQgdG8gdXBkYXRlIG91ciBzdG9yZSAtIHdlIGhhdmUgYSBmZXcgd2F5cyB0byBkbyB0aGF0OlxuLy8gT25lIC0gd2UgY2FuIGdvIG51Y3VsYXIgYW5kIHJ1biByZWZldGNoUXVlcmllcygpIHdoaWNoIHdpbGwganVzdCBnbyBnZXQgZXZlcnl0aGluZyAtIHRoaXMgaXMgZWFzeSwgYnV0IGF0IHRoZSBjb3N0IG9mIGVmZmljaWVuY3kuXG5cblxuZXhwb3J0IGRlZmF1bHQgZ3JhcGhxbChDUkVBVEVfTElOS19NVVRBVElPTiwgeyBuYW1lOiAnY3JlYXRlTGlua011dGF0aW9uJywgb3B0aW9uczoge1xuICAgIC8vIEVhc3ksIGJ1dCBzbG93XG4gICAgLy8gcmVmZXRjaFF1ZXJpZXM6IFsnQWxsTGlua3NRdWVyeSddXG4gICAgLy8gVGhpcyBpcyBtdWNoIEJldHRlciAvIGVmZmljaWVudFxuICAgIC8vIE5vdGljZSBob3cgdGhlIHZhcmlhYmxlIGlzIGNhbGxlZCBjcmVhdGVJdGVtIC0gdGhhdCBpcyBiZWNhdXNlIGNyZWF0ZUl0ZW0gaXMgdGhlIG5hbWUgb2YgdGhlIHF1ZXJ5IVxuICAgIHVwZGF0ZTogKHByb3h5LCB7IGRhdGE6IHsgY3JlYXRlSXRlbSB9IH0pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHtjcmVhdGVJdGVtLCBBTExfSVRFTVNfUVVFUll9KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBwcm94eS5yZWFkUXVlcnkoeyBxdWVyeTogQUxMX0lURU1TX1FVRVJZIH0pO1xuICAgICAgLy8gZGF0YSBpcyBvdXIgc3RvcmUsIGFsbEl0ZW1zIGlzIG91ciBzdWItXCJzdGF0ZVwiLCBpdCdzIGp1c3QgYW4gYXJyYXkuIFdlIGNhbiBqdXN0IGFkZCBpdCB0b1xuICAgICAgZGF0YS5hbGxJdGVtcy51bnNoaWZ0KGNyZWF0ZUl0ZW0pO1xuICAgICAgLy8gYW5kIHRoZW4gXCJzZXQgc3RhdGVcIiwgc28gaXQgd2lsbCB1cGRhdGUgb24gdGhlIHBhZ2UuIFRoaXMgd2lsbCB1cGRhdGUgdGhlIGNhY2hlIGZvciB1cyFcbiAgICAgIHByb3h5LndyaXRlUXVlcnkoeyBxdWVyeTogQUxMX0lURU1TX1FVRVJZLCBkYXRhIH0pO1xuICAgIH0sXG4gIH0gfSkoQ3JlYXRlTGluaylcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvQ3JlYXRlSXRlbS5qcyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdyYXBocWwsIGdxbCB9IGZyb20gJ3JlYWN0LWFwb2xsbydcblxuaW1wb3J0IHsgQUxMX0lURU1TX1FVRVJZIH0gZnJvbSAnLi4vcXVlcmllcyc7XG5cbmNsYXNzIENvdW50IGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICByZW5kZXIoKSB7XG5cbiAgICAvLyAxXG4gICAgaWYgKHRoaXMucHJvcHMuYWxsTGlua3NRdWVyeSAmJiB0aGlzLnByb3BzLmFsbExpbmtzUXVlcnkubG9hZGluZykge1xuICAgICAgcmV0dXJuIDxkaXY+TG9hZGluZzwvZGl2PlxuICAgIH1cblxuICAgIC8vIDJcbiAgICBpZiAodGhpcy5wcm9wcy5hbGxMaW5rc1F1ZXJ5ICYmIHRoaXMucHJvcHMuYWxsTGlua3NRdWVyeS5lcnJvcikge1xuICAgICAgcmV0dXJuIDxkaXY+RXJyb3I8L2Rpdj5cbiAgICB9XG5cbiAgICAvLyAzXG4gICAgY29uc3QgaXRlbXNUb1JlbmRlciA9IHRoaXMucHJvcHMuYWxsTGlua3NRdWVyeS5hbGxJdGVtc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxoMT5UaGVyZSBhcmUge2l0ZW1zVG9SZW5kZXIubGVuZ3RofSBpdGVtcyBmb3Igc2FsZTwvaDE+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxufVxuXG4vLyAxXG5cbi8vIFdlIGV4cG9ydCB0aGUgZ3JhcGhRTCBIT0MgLSB0aGlzIHdpbGwgZmV0Y2ggdGhlIGRhdGEgYW5kIGluamVjdCBpdCBpbnRvIHRoZSBDb3VudCBjb21wZW9udCB2aWEgcHJvcHNcblxuZXhwb3J0IHsgQUxMX0lURU1TX1FVRVJZIH1cbmV4cG9ydCBkZWZhdWx0IGdyYXBocWwoQUxMX0lURU1TX1FVRVJZLCB7IG5hbWU6ICdhbGxMaW5rc1F1ZXJ5JyB9KSAoQ291bnQpXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb21wb25lbnRzL0NvdW50LmpzIl0sIm1hcHBpbmdzIjoiO0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUVBO0FBQ0E7Ozs7Ozs7Ozs7QUFEQTtBQUNBO0FBWUE7QUFDQTtBQVdBO0FBQ0E7QUFVQTtBQUNBO0FBUUE7QUFDQTtBQVNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzREE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7Ozs7Ozs7QUFDQTs7Ozs7Ozs7Ozs7QUFFQTtBQUNBOztBQUFBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBR0E7QUFIQTtBQUFBOzs7OztBQU1BO0FBQ0E7QUFEQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25CQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFBQTtBQUNBO0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUNBOztBQURBO0FBQUE7QUFNQTtBQU5BO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQVhBO0FBQ0E7QUFVQTtBQVhBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFZQTtBQUNBO0FBREE7QUFaQTtBQUNBO0FBREE7QUFpQkE7QUFqQkE7QUFBQTtBQWtCQTtBQUNBO0FBbkJBO0FBb0JBO0FBQ0E7QUFyQkE7QUFBQTtBQUFBO0FBd0JBO0FBQUE7QUFDQTtBQURBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQTFCQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBZ0NBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQXRDQTtBQUNBOzs7QUEwQ0E7QUFBQTtBQURBO0FBREE7QUFDQTtBQTFDQTs7QUFBQTtBQWlEQTtBQUNBO0FBbERBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFzREE7QUF0REE7QUFDQTtBQXFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQXpEQTtBQUNBOztBQURBO0FBNERBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUdBO0FBSEE7QUFBQTtBQTlEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBR0E7QUFBQTtBQUpBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWkE7QUFDQTtBQUFBO0FBQ0E7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBRUE7O0FBR0E7QUFBQTs7QUFFQTtBQUVBO0FBSUE7QUFMQTtBQURBO0FBSEE7QUFXQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDQTtBQUNBOzs7QUFBQTtBQUNBO0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQ0E7QUFDQTs7Ozs7OztBQUNBO0FBQ0E7QUFHQTs7Ozs7Ozs7Ozs7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7O0FBQUE7QUFDQTtBQURBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBREE7QUFEQTtBQUlBO0FBSkE7QUFJQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQ0E7QUFEQTtBQUdBOztBQUpBO0FBTUE7QUFOQTtBQU1BOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFFQTtBQUZBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQTs7Ozs7QUFuREE7QUFDQTtBQXNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFFQTs7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQU1BO0FBZkE7QUFGQTtBQUNBO0FBZ0JBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlGQTtBQUNBOzs7QUFBQTtBQUNBO0FBQUE7QUFDQTs7Ozs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUE2QkE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFHQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBVEE7QUFVQTtBQUVBO0FBQ0E7QUFGQTtBQUNBO0FBRkE7QUFWQTtBQUNBO0FBZUE7QUFDQTtBQWpCQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7QUF6QkE7QUFDQTs7QUFBQTtBQUVBO0FBRkE7QUFBQTs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFGQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBRkE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUZBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFGQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBRkE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUlBOzs7OztBQXZDQTtBQUNBO0FBNkRBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUVBO0FBQ0E7Ozs7O0FBREE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNIQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFBQTtBQUNBO0FBQUE7QUFDQTs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRkE7QUFHQTtBQUNBO0FBREE7QUFIQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBTkE7QUFBQTtBQUFBOztBQUFBO0FBQUE7Ozs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUVBO0FBQUE7O0FBSkE7QUFNQTtBQU5BO0FBRUE7Ozs7OztBQVVBO0FBQ0E7QUFEQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUMvQkE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDREE7QUFDQTs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7Ozs7OztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBSEE7QUFVQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBTEE7QUFBQTtBQU9BO0FBRUE7QUFBQTtBQURBO0FBQ0E7QUFGQTtBQVBBO0FBQUE7QUFXQTtBQUNBO0FBREE7QUFYQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBZEE7QUFBQTtBQUFBOztBQUFBO0FBQUE7Ozs7OztBQXdDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQVBBO0FBUUE7QUFFQTs7QUFFQTtBQUNBO0FBQUE7QUFGQTtBQUZBO0FBQ0E7QUFGQTtBQVJBO0FBQ0E7QUFlQTtBQUNBO0FBakJBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOzs7Ozs7Ozs7OztBQTVDQTtBQUNBOzs7O0FBbUJBO0FBQ0E7QUFDQTtBQUFBOztBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBRUE7QUFDQTtBQURBO0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBRkE7QUFFQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBRkE7O0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBOztBQUpBO0FBTUE7QUFOQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBSUE7Ozs7O0FBbkRBO0FBd0VBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFBQTtBQVhBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQ0E7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFDQTs7Ozs7Ozs7Ozs7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7QUFBQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFuQkE7QUFDQTtBQXlCQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTs7Ozs7QSIsInNvdXJjZVJvb3QiOiIifQ== +},[877]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlcy9wYWdlcy9pbmRleC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3F1ZXJpZXMvaW5kZXguanM/YmVhNjVlMyIsIndlYnBhY2s6Ly8vLi9saWIvd2l0aERhdGEuanM/YmVhNjVlMyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL0l0ZW1zLmpzP2JlYTY1ZTMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9DcmVhdGVJdGVtLmpzP2JlYTY1ZTMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9Mb2dpbkF1dGgwLmpzP2JlYTY1ZTMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9QYWdlLmpzP2JlYTY1ZTMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9OYXYuanM/YmVhNjVlMyIsIndlYnBhY2s6Ly8vLi9saWIvaW5pdEFwb2xsby5qcz9iZWE2NWUzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvVXBkYXRlSXRlbS5qcz9iZWE2NWUzIiwid2VicGFjazovLy8uL3F1ZXJpZXMvZnJhZ21lbnRzLmpzP2JlYTY1ZTMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9UYWtlTXlNb25leS5qcz9iZWE2NWUzIiwid2VicGFjazovLy8uL2xpYi9mb3JtYXRNb25leS5qcz9iZWE2NWUzIiwid2VicGFjazovLy8uL2xpYi9pbWFnZS5qcz9iZWE2NWUzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvSGVhZGVyLmpzP2JlYTY1ZTMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9NZXRhLmpzP2JlYTY1ZTMiLCJ3ZWJwYWNrOi8vLy4vcGFnZXM/YmVhNjVlMyIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL0NvdW50LmpzP2JlYTY1ZTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ3FsIH0gZnJvbSAncmVhY3QtYXBvbGxvJ1xuaW1wb3J0IHsgaXRlbURldGFpbHMgfSBmcm9tICcuL2ZyYWdtZW50cyc7XG5cbmV4cG9ydCBjb25zdCBDUkVBVEVfTElOS19NVVRBVElPTiA9IGdxbGBcbiAgJHtpdGVtRGV0YWlsc31cbiAgbXV0YXRpb24gQ3JlYXRlTGlua011dGF0aW9uKCRkZXNjcmlwdGlvbjogU3RyaW5nISwgJHRpdGxlOiBTdHJpbmchLCAkaW1hZ2VJZDogSUQsICRwcmljZTogSW50ISkge1xuICAgIGNyZWF0ZUl0ZW0oXG4gICAgICBkZXNjcmlwdGlvbjogJGRlc2NyaXB0aW9uLFxuICAgICAgdGl0bGU6ICR0aXRsZSxcbiAgICAgIGltYWdlSWQ6ICRpbWFnZUlkXG4gICAgICBwcmljZTogJHByaWNlXG4gICAgKSB7XG4gICAgICAuLi5pdGVtRGV0YWlsc1xuICAgIH1cbiAgfVxuYFxuXG5leHBvcnQgY29uc3QgQ1JFQVRFX1VTRVJfTVVUQVRJT04gPSBncWxgXG4gIG11dGF0aW9uIENyZWF0ZVVzZXJNdXRhdGlvbigkZW1haWw6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkaWRUb2tlbjogU3RyaW5nISkge1xuICAgIGNyZWF0ZVVzZXIoXG4gICAgICBlbWFpbDogJGVtYWlsLFxuICAgICAgbmFtZTogJG5hbWUsXG4gICAgICBhdXRoUHJvdmlkZXI6IHsgYXV0aDA6IHsgaWRUb2tlbjogJGlkVG9rZW4gfSB9XG4gICAgKSB7XG4gICAgICBpZCxcbiAgICAgIGVtYWlsLFxuICAgICAgbmFtZVxuICAgIH1cbiAgfVxuYFxuXG5leHBvcnQgY29uc3QgQ1JFQVRFX09SREVSX01VVEFUSU9OID0gZ3FsYFxuICBtdXRhdGlvbiBDcmVhdGVPcmRlck11dGF0aW9uKCR0b2tlbjogU3RyaW5nISwgJHVzZXJJZDogSUQhLCAkaXRlbUlkOiBJRCEpIHtcbiAgICBjcmVhdGVPcmRlcih0b2tlbjogJHRva2VuLCB1c2VySWQ6ICR1c2VySWQsIGl0ZW1JZDogJGl0ZW1JZCkge1xuICAgICAgaWRcbiAgICAgIHRva2VuXG4gICAgICBjaGFyZ2VcbiAgICAgIGFtb3VudFxuICAgICAgaXRlbSB7XG4gICAgICAgIGlkXG4gICAgICAgIHRpdGxlXG4gICAgICAgIGRlc2NyaXB0aW9uXG4gICAgICB9XG4gICAgICB1c2VyIHtcbiAgICAgICAgaWRcbiAgICAgICAgZW1haWxcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cblxuZXhwb3J0IGNvbnN0IEFMTF9JVEVNU19RVUVSWSA9IGdxbGBcbiAgIyBJbXBvcnQgdGhlIEZyYWdtZW50XG4gICR7aXRlbURldGFpbHN9XG4gIHF1ZXJ5IEFsbExpbmtzUXVlcnkge1xuICAgIGFsbEl0ZW1zKG9yZGVyQnk6IGNyZWF0ZWRBdF9ERVNDKSB7XG4gICAgICAjIFVzZSB0aGF0IGZyYWdtZW50IGJ5IGl0J3MgbmFtZSAoZXZlbiB0aG91Z2ggaXQgdGhlIHNhbWUgYXMgdGhlIHZhcmlhYmxlKVxuICAgICAgLi4uaXRlbURldGFpbHNcbiAgICB9XG4gIH1cbmBcblxuZXhwb3J0IGNvbnN0IFNJTkdMRV9MSU5LX1FVRVJZID0gZ3FsYFxuICAke2l0ZW1EZXRhaWxzfVxuICBxdWVyeSBGaW5kSXRlbSgkaWQ6IElEISkge1xuICAgIEl0ZW0oaWQ6ICRpZCkge1xuICAgICAgLi4uaXRlbURldGFpbHNcbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBERUxFVEVfSVRFTV9NVVRBVElPTiA9IGdxbGBcbiAgbXV0YXRpb24gRGVsdGVJdGVtKCRpZDogSUQhKSB7XG4gICAgZGVsZXRlSXRlbShpZDogJGlkKSB7XG4gICAgICBpZCxcbiAgICAgIHRpdGxlLFxuICAgICAgZGVzY3JpcHRpb25cbiAgICB9XG4gIH1cbmBcblxuZXhwb3J0IGNvbnN0IFVQREFURV9MSU5LX01VVEFUSU9OID0gZ3FsYFxuICAke2l0ZW1EZXRhaWxzfVxuICBtdXRhdGlvbiBVcGRhdGVJdGVtKCRpZDogSUQhLCAkdGl0bGU6IFN0cmluZyEsICRkZXNjcmlwdGlvbjogU3RyaW5nISwgJHByaWNlOiBJbnQhLCAkZnVsbFByaWNlOiBJbnQhKSB7XG4gICAgdXBkYXRlSXRlbShcbiAgICAgIGlkOiAkaWQsXG4gICAgICBkZXNjcmlwdGlvbjogJGRlc2NyaXB0aW9uLFxuICAgICAgdGl0bGU6ICR0aXRsZSxcbiAgICAgIHByaWNlOiAkcHJpY2UsXG4gICAgICBmdWxsUHJpY2U6ICRmdWxsUHJpY2VcbiAgICApIHtcbiAgICAgIC4uLml0ZW1EZXRhaWxzXG4gICAgfVxuICB9XG5gXG5cbmV4cG9ydCBjb25zdCBDVVJSRU5UX1VTRVJfUVVFUlkgPSBncWxgXG4gIHF1ZXJ5IHVzZXJRdWVyeSB7XG4gICAgdXNlciB7XG4gICAgICBpZFxuICAgICAgbmFtZVxuICAgICAgZW1haWxcbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBjb25zdCBVU0VSX09SREVSU19RVUVSWSA9IGdxbGBcbiAgcXVlcnkge1xuICAgIHVzZXIgeyAjIGdyYWIgdGhlIGN1cnJlbnQgdXNlclxuICAgICAgaWRcbiAgICAgIG9yZGVycyB7ICMgYW5kIGEgYWxsIHRoZWlyIG9yZGVyc1xuICAgICAgICBpZFxuICAgICAgICBhbW91bnRcbiAgICAgICAgY2hhcmdlXG4gICAgICAgIGl0ZW0geyAjIHBvcHVsYXRlIHRoZSBkZXRhaWxzIGFib3V0IHRoZSBpdGVtIHRoZXkgYm91Z2h0IHdpdGggdGhlIGltYWdlLCBkZXNjcmlwdGlvbiBhbmQgdGl0bGVcbiAgICAgICAgICBpbWFnZSB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHNlY3JldFxuICAgICAgICAgIH1cbiAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICAgIHRpdGxlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9xdWVyaWVzL2luZGV4LmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHsgQXBvbGxvUHJvdmlkZXIsIGdldERhdGFGcm9tVHJlZSB9IGZyb20gJ3JlYWN0LWFwb2xsbydcbmltcG9ydCBIZWFkIGZyb20gJ25leHQvaGVhZCdcbmltcG9ydCBpbml0QXBvbGxvIGZyb20gJy4vaW5pdEFwb2xsbydcblxuLy8gR2V0cyB0aGUgZGlzcGxheSBuYW1lIG9mIGEgSlNYIGNvbXBvbmVudCBmb3IgZGV2IHRvb2xzXG5mdW5jdGlvbiBnZXRDb21wb25lbnREaXNwbGF5TmFtZSAoQ29tcG9uZW50KSB7XG4gIHJldHVybiBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ1Vua25vd24nXG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvc2VkQ29tcG9uZW50ID0+IHtcbiAgcmV0dXJuIGNsYXNzIFdpdGhEYXRhIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgZGlzcGxheU5hbWUgPSBgV2l0aERhdGEoJHtnZXRDb21wb25lbnREaXNwbGF5TmFtZShDb21wb3NlZENvbXBvbmVudCl9KWBcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgc2VydmVyU3RhdGU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBnZXRJbml0aWFsUHJvcHMgKGN0eCkge1xuICAgICAgbGV0IHNlcnZlclN0YXRlID0ge31cblxuICAgICAgLy8gRXZhbHVhdGUgdGhlIGNvbXBvc2VkIGNvbXBvbmVudCdzIGdldEluaXRpYWxQcm9wcygpXG4gICAgICBsZXQgY29tcG9zZWRJbml0aWFsUHJvcHMgPSB7fVxuICAgICAgaWYgKENvbXBvc2VkQ29tcG9uZW50LmdldEluaXRpYWxQcm9wcykge1xuICAgICAgICBjb21wb3NlZEluaXRpYWxQcm9wcyA9IGF3YWl0IENvbXBvc2VkQ29tcG9uZW50LmdldEluaXRpYWxQcm9wcyhjdHgpXG4gICAgICB9XG5cbiAgICAgIC8vIFJ1biBhbGwgR3JhcGhRTCBxdWVyaWVzIGluIHRoZSBjb21wb25lbnQgdHJlZVxuICAgICAgLy8gYW5kIGV4dHJhY3QgdGhlIHJlc3VsdGluZyBkYXRhXG4gICAgICBpZiAoIXByb2Nlc3MuYnJvd3Nlcikge1xuICAgICAgICBjb25zdCBhcG9sbG8gPSBpbml0QXBvbGxvKClcbiAgICAgICAgLy8gUHJvdmlkZSB0aGUgYHVybGAgcHJvcCBkYXRhIGluIGNhc2UgYSBHcmFwaFFMIHF1ZXJ5IHVzZXMgaXRcbiAgICAgICAgY29uc3QgdXJsID0ge3F1ZXJ5OiBjdHgucXVlcnksIHBhdGhuYW1lOiBjdHgucGF0aG5hbWV9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gUnVuIGFsbCBHcmFwaFFMIHF1ZXJpZXNcbiAgICAgICAgICBhd2FpdCBnZXREYXRhRnJvbVRyZWUoXG4gICAgICAgICAgICA8QXBvbGxvUHJvdmlkZXIgY2xpZW50PXthcG9sbG99PlxuICAgICAgICAgICAgICA8Q29tcG9zZWRDb21wb25lbnQgdXJsPXt1cmx9IHsuLi5jb21wb3NlZEluaXRpYWxQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQXBvbGxvUHJvdmlkZXI+XG4gICAgICAgICAgKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFByZXZlbnQgQXBvbGxvIENsaWVudCBHcmFwaFFMIGVycm9ycyBmcm9tIGNyYXNoaW5nIFNTUi5cbiAgICAgICAgICAvLyBIYW5kbGUgdGhlbSBpbiBjb21wb25lbnRzIHZpYSB0aGUgZGF0YS5lcnJvciBwcm9wOlxuICAgICAgICAgIC8vIGh0dHA6Ly9kZXYuYXBvbGxvZGF0YS5jb20vcmVhY3QvYXBpLXF1ZXJpZXMuaHRtbCNncmFwaHFsLXF1ZXJ5LWRhdGEtZXJyb3JcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXREYXRhRnJvbVRyZWUgZG9lcyBub3QgY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudFxuICAgICAgICAvLyBoZWFkIHNpZGUgZWZmZWN0IHRoZXJlZm9yZSBuZWVkIHRvIGJlIGNsZWFyZWQgbWFudWFsbHlcbiAgICAgICAgSGVhZC5yZXdpbmQoKVxuXG4gICAgICAgIC8vIEV4dHJhY3QgcXVlcnkgZGF0YSBmcm9tIHRoZSBBcG9sbG8gc3RvcmVcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBhcG9sbG8uZ2V0SW5pdGlhbFN0YXRlKClcblxuICAgICAgICBzZXJ2ZXJTdGF0ZSA9IHtcbiAgICAgICAgICBhcG9sbG86IHtcbiAgICAgICAgICAgIC8vIE9ubHkgaW5jbHVkZSB0aGUgQXBvbGxvIGRhdGEgc3RhdGVcbiAgICAgICAgICAgIGRhdGE6IHN0YXRlLmRhdGFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VydmVyU3RhdGUsXG4gICAgICAgIC4uLmNvbXBvc2VkSW5pdGlhbFByb3BzXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcylcbiAgICAgIHRoaXMuYXBvbGxvID0gaW5pdEFwb2xsbyh0aGlzLnByb3BzLnNlcnZlclN0YXRlKVxuICAgIH1cblxuICAgIHJlbmRlciAoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QXBvbGxvUHJvdmlkZXIgY2xpZW50PXt0aGlzLmFwb2xsb30+XG4gICAgICAgICAgPENvbXBvc2VkQ29tcG9uZW50IHsuLi50aGlzLnByb3BzfSAvPlxuICAgICAgICA8L0Fwb2xsb1Byb3ZpZGVyPlxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbGliL3dpdGhEYXRhLmpzIiwiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBncmFwaHFsLCBjb21wb3NlIH0gZnJvbSAncmVhY3QtYXBvbGxvJ1xuaW1wb3J0IFVwZGF0ZUl0ZW0gZnJvbSAnLi9VcGRhdGVJdGVtJztcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluayc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBUYWtlTXlNb25leSBmcm9tICcuL1Rha2VNeU1vbmV5JztcbmltcG9ydCBmb3JtYXRNb25leSBmcm9tICcuLi9saWIvZm9ybWF0TW9uZXknO1xuaW1wb3J0IG1ha2VJbWFnZSBmcm9tICcuLi9saWIvaW1hZ2UnO1xuXG5pbXBvcnQgeyBBTExfSVRFTVNfUVVFUlksIERFTEVURV9JVEVNX01VVEFUSU9OIH0gZnJvbSAnLi4vcXVlcmllcyc7XG5cbmNvbnN0IFRpdGxlID0gc3R5bGVkLmgxYFxuICBmb250LXNpemU6IDUwcHg7XG5gO1xuXG5cblxuY29uc3QgSXRlbXMgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCBjYWxjKDI1JSAtIDIwcHgpKTtcbiAgZ3JpZC1nYXA6IDIwcHg7XG5gO1xuXG5jb25zdCBJdGVtID0gc3R5bGVkLmRpdmBcbiAgYmFja2dyb3VuZDogI2YzZjNmMztcbiAgcGFkZGluZzogMjBweDtcbiAgaW1nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuYDtcblxuY2xhc3MgSXRlbUxpc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIHJlbmRlcigpIHtcblxuICAgIC8vIDFcbiAgICBpZiAodGhpcy5wcm9wcy5hbGxMaW5rc1F1ZXJ5ICYmIHRoaXMucHJvcHMuYWxsTGlua3NRdWVyeS5sb2FkaW5nKSB7XG4gICAgICByZXR1cm4gPGRpdj5Mb2FkaW5nPC9kaXY+XG4gICAgfVxuXG4gICAgLy8gMlxuICAgIGlmICh0aGlzLnByb3BzLmFsbExpbmtzUXVlcnkgJiYgdGhpcy5wcm9wcy5hbGxMaW5rc1F1ZXJ5LmVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnByb3BzLmFsbExpbmtzUXVlcnkuZXJyb3IpXG4gICAgICByZXR1cm4gPGRpdj5FcnJvcjwvZGl2PlxuICAgIH1cblxuICAgIC8vIDNcbiAgICBjb25zdCBpdGVtc1RvUmVuZGVyID0gdGhpcy5wcm9wcy5hbGxMaW5rc1F1ZXJ5LmFsbEl0ZW1zXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEl0ZW1zPlxuICAgICAgICA8VGl0bGU+SXRlbXMgRm9yIFNhbGU8L1RpdGxlPlxuICAgICAgICB7aXRlbXNUb1JlbmRlci5tYXAoKGl0ZW0saSkgPT4gKFxuICAgICAgICAgIDxJdGVtIGNsYXNzTmFtZT1cIml0ZW1cIiBrZXk9e2l9PlxuICAgICAgICAgICAgeyBpdGVtLmltYWdlID8gIDxpbWcgc3JjPXttYWtlSW1hZ2UoaXRlbS5pbWFnZSl9IC8+IDogbnVsbCB9XG4gICAgICAgICAgICA8aDM+e2l0ZW0udGl0bGV9PC9oMz5cbiAgICAgICAgICAgIDxwPntpdGVtLmRlc2NyaXB0aW9ufTwvcD5cbiAgICAgICAgICAgIDxMaW5rIGhyZWY9e3tcbiAgICAgICAgICAgICAgcGF0aG5hbWU6ICcvYWRtaW4vdXBkYXRlJyxcbiAgICAgICAgICAgICAgcXVlcnk6IHsgaWQ6IGl0ZW0uaWQgfVxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgIDxhPkVkaXQge2l0ZW0uaWR9PC9hPlxuICAgICAgICAgICAgPC9MaW5rPlxuXG4gICAgICAgICAgICA8VGFrZU15TW9uZXlcbiAgICAgICAgICAgICAgaWQ9e2l0ZW0uaWR9XG4gICAgICAgICAgICAgIGFtb3VudD17aXRlbS5wcmljZX1cbiAgICAgICAgICAgICAgbmFtZT17aXRlbS50aXRsZX0gLy8gdGhlIHBvcC1pbiBoZWFkZXIgdGl0bGVcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2l0ZW0uZGVzY3JpcHRpb259IC8vIHRoZSBwb3AtaW4gaGVhZGVyIHN1YnRpdGxlXG4gICAgICAgICAgICAgIGltYWdlPXttYWtlSW1hZ2UoaXRlbS5pbWFnZSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b24+QnV5IGZvciB7Zm9ybWF0TW9uZXkoaXRlbS5wcmljZSl9PC9idXR0b24+XG4gICAgICAgICAgICA8L1Rha2VNeU1vbmV5PlxuICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB0aGlzLnByb3BzLnJlbW92ZUl0ZW1NdXRhdGlvbih7IHZhcmlhYmxlczogeyBpZDogaXRlbS5pZCB9fSl9PiZ0aW1lczsgRGVsZXRlIGl0ZW08L2J1dHRvbj5cblxuICAgICAgICAgIDwvSXRlbT5cbiAgICAgICAgKSl9XG4gICAgICA8L0l0ZW1zPlxuICAgIClcbiAgfVxuXG59XG5cbi8vIDFcblxuLy8gV2UgZXhwb3J0IHRoZSBncmFwaFFMIEhPQyAtIHRoaXMgd2lsbCBmZXRjaCB0aGUgZGF0YSBhbmQgaW5qZWN0IGl0IGludG8gdGhlIEl0ZW1MaXN0IGNvbXBlb250IHZpYSBwcm9wc1xuXG4vLyBDcmVhdGUgc29tZSBFbmhhbmNlcnNcbmNvbnN0IGl0ZW1zRW5haG5jZXIgPSBncmFwaHFsKEFMTF9JVEVNU19RVUVSWSwgeyBuYW1lOiAnYWxsTGlua3NRdWVyeScgfSk7XG5jb25zdCBkZWxldGVJdGVtRW5oYW5jZXIgPSBncmFwaHFsKERFTEVURV9JVEVNX01VVEFUSU9OLCB7XG4gIG5hbWU6ICdyZW1vdmVJdGVtTXV0YXRpb24nLFxuICBvcHRpb25zOiB7XG4gICAgdXBkYXRlOiAocHJveHksIHsgZGF0YTogeyBkZWxldGVJdGVtIH0gfSkgPT4ge1xuXG4gICAgICAvLyBncmFiIHRoZSBkYXRhIGZyb20gb3VyIGNhY2hlXG4gICAgICBjb25zdCBkYXRhID0gcHJveHkucmVhZFF1ZXJ5KHsgcXVlcnk6IEFMTF9JVEVNU19RVUVSWSB9KTtcblxuICAgICAgLy8gZmlsdGVyIG91dCB0aGUgZGVsdGVkIGl0ZW1cbiAgICAgIGRhdGEuYWxsSXRlbXMgPSBkYXRhLmFsbEl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGRlbGV0ZUl0ZW0uaWQpO1xuXG4gICAgICAvLyBhbmQgdGhlbiBcInNldCBzdGF0ZVwiICh1cGRhdGUgY2FjaGUpLCBzbyBpdCB3aWxsIHVwZGF0ZSB3aGVyZWV2ZXIgd2UgaGF2ZSB1c2VkIHRoaXMgZGF0YSBvbiB0aGUgcGFnZVxuICAgICAgcHJveHkud3JpdGVRdWVyeSh7IHF1ZXJ5OiBBTExfSVRFTVNfUVVFUlksIGRhdGEgfSk7XG5cbiAgICB9LFxuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZShpdGVtc0VuYWhuY2VyLCBkZWxldGVJdGVtRW5oYW5jZXIpKEl0ZW1MaXN0KVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY29tcG9uZW50cy9JdGVtcy5qcyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdyYXBocWwsIGdxbCB9IGZyb20gJ3JlYWN0LWFwb2xsbydcbmltcG9ydCB7IEFMTF9JVEVNU19RVUVSWSwgQ1JFQVRFX0xJTktfTVVUQVRJT04gfSBmcm9tICcuLi9xdWVyaWVzJztcblxuY2xhc3MgQ3JlYXRlTGluayBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgc3RhdGUgPSB7XG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIHRpdGxlOiAnJyxcbiAgICBpbWFnZTogJycsXG4gICAgcHJpY2U6IDAsXG4gICAgZnVsbFByaWNlOiAwLFxuICAgIGxvYWRpbmc6IGZhbHNlXG4gIH1cblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIGNvbnNvbGUubG9nKG5leHRQcm9wcyk7XG4gIH1cblxuICB1cGxvYWRGaWxlID0gYXN5bmMgKGUpID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGUuY3VycmVudFRhcmdldC5maWxlcztcblxuICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZGF0YS5hcHBlbmQoJ2RhdGEnLCBmaWxlc1swXSk7XG5cbiAgICAvLyB1c2UgdGhlIGZpbGUgZW5kcG9pbnRcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuZ3JhcGguY29vbC9maWxlL3YxL2NqNXh6OHN6czI4OTMwMTQ1Z2N0ODJiZGonLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGRhdGFcbiAgICB9KTtcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBjb25zb2xlLmxvZyhmaWxlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgaW1hZ2U6IGZpbGUuaWQgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIHsgdGhpcy5zdGF0ZS5sb2FkaW5nID8gJ0xPQURJTkcuLi4nIDogJ1JlYWR5IScgfVxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17dGhpcy5fY3JlYXRlTGlua30+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICBJbWFnZVxuICAgICAgICAgICAgPGlucHV0IG9uQ2hhbmdlPXt0aGlzLnVwbG9hZEZpbGV9IHR5cGU9J2ZpbGUnLz5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHA+VGl0bGVcbiAgICAgICAgICAgIDxpbnB1dCB2YWx1ZT17dGhpcy5zdGF0ZS50aXRsZX0gb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgdGl0bGU6IGUudGFyZ2V0LnZhbHVlIH0pfSB0eXBlPSd0ZXh0JyBwbGFjZWhvbGRlcj0nQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpbmsnLz5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGxhYmVsPlByaWNlPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCIgdmFsdWU9e3RoaXMuc3RhdGUucHJpY2V9IG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IHByaWNlOiBlLnRhcmdldC52YWx1ZSB9KX0gLz48L2xhYmVsPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZGVzY3JpcHRpb259XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBkZXNjcmlwdGlvbjogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICB0eXBlPSd0ZXh0J1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI9J1RoZSBkZXNjIGZvciB0aGlzIGl0ZW0nXG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCI+U3VibWl0PC9idXR0b24+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIF9jcmVhdGVMaW5rID0gYXN5bmMgKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgLy8gcHVsbCB0aGUgdmFsdWVzIGZyb20gc3RhdGVcbiAgICBjb25zdCB7IGRlc2NyaXB0aW9uLCB0aXRsZSwgaW1hZ2UsIHByaWNlLCBmdWxsUHJpY2UgfSA9IHRoaXMuc3RhdGU7XG4gICAgLy8gY3JlYXRlIGEgbXV0YXRpb25cbiAgICAvLyBUT0RPOiBoYW5kbGUgYW55IGVycm9yc1xuICAgIC8vIHR1cm4gbG9hZGluZyBvblxuICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0pO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucHJvcHMuY3JlYXRlTGlua011dGF0aW9uKHtcbiAgICAgIC8vIHBhc3MgaW4gdGhvc2UgdmFyaWFibGVzIGZyb20gc3RhdGVcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHByaWNlOiBwYXJzZUludChwcmljZSksXG4gICAgICAgIGZ1bGxQcmljZSxcbiAgICAgICAgaW1hZ2VJZDogaW1hZ2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XG4gIH1cbn1cbi8vIFdoZW4gd2Ugc3VibWl0IHRoaXMgbXV0YXRpb24sIHdlIG5lZWQgdG8gdXBkYXRlIG91ciBzdG9yZSAtIHdlIGhhdmUgYSBmZXcgd2F5cyB0byBkbyB0aGF0OlxuLy8gT25lIC0gd2UgY2FuIGdvIG51Y3VsYXIgYW5kIHJ1biByZWZldGNoUXVlcmllcygpIHdoaWNoIHdpbGwganVzdCBnbyBnZXQgZXZlcnl0aGluZyAtIHRoaXMgaXMgZWFzeSwgYnV0IGF0IHRoZSBjb3N0IG9mIGVmZmljaWVuY3kuXG5cblxuZXhwb3J0IGRlZmF1bHQgZ3JhcGhxbChDUkVBVEVfTElOS19NVVRBVElPTiwgeyBuYW1lOiAnY3JlYXRlTGlua011dGF0aW9uJywgb3B0aW9uczoge1xuICAgIC8vIEVhc3ksIGJ1dCBzbG93XG4gICAgLy8gcmVmZXRjaFF1ZXJpZXM6IFsnQWxsTGlua3NRdWVyeSddXG4gICAgLy8gVGhpcyBpcyBtdWNoIEJldHRlciAvIGVmZmljaWVudFxuICAgIC8vIE5vdGljZSBob3cgdGhlIHZhcmlhYmxlIGlzIGNhbGxlZCBjcmVhdGVJdGVtIC0gdGhhdCBpcyBiZWNhdXNlIGNyZWF0ZUl0ZW0gaXMgdGhlIG5hbWUgb2YgdGhlIHF1ZXJ5IVxuICAgIHVwZGF0ZTogKHByb3h5LCB7IGRhdGE6IHsgY3JlYXRlSXRlbSB9IH0pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHtjcmVhdGVJdGVtLCBBTExfSVRFTVNfUVVFUll9KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBwcm94eS5yZWFkUXVlcnkoeyBxdWVyeTogQUxMX0lURU1TX1FVRVJZIH0pO1xuICAgICAgLy8gZGF0YSBpcyBvdXIgc3RvcmUsIGFsbEl0ZW1zIGlzIG91ciBzdWItXCJzdGF0ZVwiLCBpdCdzIGp1c3QgYW4gYXJyYXkuIFdlIGNhbiBqdXN0IGFkZCBpdCB0b1xuICAgICAgZGF0YS5hbGxJdGVtcy51bnNoaWZ0KGNyZWF0ZUl0ZW0pO1xuICAgICAgLy8gYW5kIHRoZW4gXCJzZXQgc3RhdGVcIiwgc28gaXQgd2lsbCB1cGRhdGUgb24gdGhlIHBhZ2UuIFRoaXMgd2lsbCB1cGRhdGUgdGhlIGNhY2hlIGZvciB1cyFcbiAgICAgIHByb3h5LndyaXRlUXVlcnkoeyBxdWVyeTogQUxMX0lURU1TX1FVRVJZLCBkYXRhIH0pO1xuICAgIH0sXG4gIH0gfSkoQ3JlYXRlTGluaylcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvQ3JlYXRlSXRlbS5qcyIsImltcG9ydCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgQXV0aDBMb2NrIGZyb20gJ2F1dGgwLWxvY2snXG5cbmNsYXNzIExvZ2luQXV0aDAgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuICAgIGlmKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBgaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ251cGA7XG4gICAgY29uc29sZS5sb2cocmVkaXJlY3RVcmwpO1xuICAgIHRoaXMuX2xvY2sgPSBuZXcgQXV0aDBMb2NrKCdsODUxZXYycThYNDh3ZjU2ZUdMaklXRmJNd3didldQRScsICd3ZXNib3MuYXV0aDAuY29tJywge1xuICAgICAgYXV0aDoge1xuICAgICAgICByZWRpcmVjdDogZmFsc2UsXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVVc2VyID0gKCkgPT4ge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHtcbiAgICAgIGlkVG9rZW46IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImF1dGgwSWRUb2tlblwiKSxcbiAgICAgIGVtYWlsQWRkcmVzczogJ3dlc2Jvc0BnbWFpbC5jb20nLFxuICAgICAgbmFtZTogJ0hhcmRjb2RlZCBXZXMnXG4gICAgfTtcbiAgICAvLyBUT0RPIC0gbWFrZSBhIGNyZWF0ZVVzZXIgZnVuY3Rpb25cbiAgICB0aGlzLnByb3BzXG4gICAgICAuY3JlYXRlVXNlcih7IHZhcmlhYmxlcyB9KVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLmhpc3RvcnkucmVwbGFjZShcIi9cIik7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB0aGlzLnByb3BzLmhpc3RvcnkucmVwbGFjZShcIi9cIik7XG4gICAgICB9KTtcbiAgfTtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zb2xlLmxvZygnTU9VTlQnKTtcbiAgICB0aGlzLl9sb2NrLm9uKCdhdXRoZW50aWNhdGVkJywgKGF1dGhSZXN1bHQpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdISUlJSUlJSUknKVxuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhdXRoMElkVG9rZW4nLCBhdXRoUmVzdWx0LmlkVG9rZW4pXG4gICAgICBjb25zb2xlLmxvZygnRG9uZSEnLCBhdXRoUmVzdWx0KTtcbiAgICB9KVxuICB9XG5cbiAgX3Nob3dMb2dpbiA9ICgpID0+IHtcbiAgICB0aGlzLl9sb2NrLnNob3coKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e3RoaXMuX3Nob3dMb2dpbn0+TG9nIGluIHdpdGggQXV0aDAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9naW5BdXRoMDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvTG9naW5BdXRoMC5qcyIsImltcG9ydCBIZWFkZXIgZnJvbSAnLi9IZWFkZXInXG5pbXBvcnQgTWV0YSBmcm9tICcuL01ldGEnXG5pbXBvcnQgd2l0aERhdGEgZnJvbSAnLi4vbGliL3dpdGhEYXRhJztcbmltcG9ydCBOYXYgZnJvbSAnLi9OYXYnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmNvbnN0IFN0eWxlZFBhZ2UgPSBzdHlsZWQuZGl2YFxuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgY29sb3I6ICMzMDMwMzA7XG4gIGJhY2tncm91bmQ6ICNlZmM2MDA7XG4gIHBhZGRpbmc6IDEwMHB4O1xuYDtcblxuY29uc3QgUGFnZSA9ICh7IGNoaWxkcmVuIH0pID0+IChcbiAgPFN0eWxlZFBhZ2UgY2xhc3NOYW1lPVwibWFpblwiPlxuICAgIDxNZXRhIC8+XG4gICAgPEhlYWRlciAvPlxuICAgIDxOYXY+PC9OYXY+XG4gICAgPGRpdj5cbiAgICAgIHsgY2hpbGRyZW4gfVxuICAgIDwvZGl2PlxuICA8L1N0eWxlZFBhZ2U+XG4pXG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhEYXRhKFBhZ2UpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY29tcG9uZW50cy9QYWdlLmpzIiwiaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJ1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoXG4gIDx1bD5cbiAgICA8TGluayBocmVmPVwiL1wiPjxhPkhvbWU8L2E+PC9MaW5rPlxuICAgIDxMaW5rIGhyZWY9XCIvc2lnbnVwL1wiPjxhPlNpZ251cDwvYT48L0xpbms+XG4gICAgPExpbmsgaHJlZj1cIi9vcmRlcnMvXCI+PGE+T3JkZXJzPC9hPjwvTGluaz5cbiAgPC91bD5cbilcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvTmF2LmpzIiwiaW1wb3J0IHsgQXBvbGxvQ2xpZW50LCBjcmVhdGVOZXR3b3JrSW50ZXJmYWNlIH0gZnJvbSAncmVhY3QtYXBvbGxvJ1xuaW1wb3J0IGZldGNoIGZyb20gJ2lzb21vcnBoaWMtZmV0Y2gnXG5cbmxldCBhcG9sbG9DbGllbnQgPSBudWxsXG5cbi8vIFBvbHlmaWxsIGZldGNoKCkgb24gdGhlIHNlcnZlciAodXNlZCBieSBhcG9sbG8tY2xpZW50KVxuaWYgKCFwcm9jZXNzLmJyb3dzZXIpIHtcbiAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbn1cblxuZnVuY3Rpb24gY3JlYXRlIChpbml0aWFsU3RhdGUpIHtcblxuICBjb25zdCBuZXR3b3JrSW50ZXJmYWNlID0gY3JlYXRlTmV0d29ya0ludGVyZmFjZSh7XG4gICAgdXJpOiAnaHR0cHM6Ly9hcGkuZ3JhcGguY29vbC9zaW1wbGUvdjEvY2o1eHo4c3pzMjg5MzAxNDVnY3Q4MmJkaicsIC8vIFNlcnZlciBVUkwgKG11c3QgYmUgYWJzb2x1dGUpXG4gICAgb3B0czogeyAvLyBBZGRpdGlvbmFsIGZldGNoKCkgb3B0aW9ucyBsaWtlIGBjcmVkZW50aWFsc2Agb3IgYGhlYWRlcnNgXG4gICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHVzZSB0aGUgYXV0aDBJZFRva2VuIGluIGxvY2FsU3RvcmFnZSBmb3IgYXV0aG9yaXplZCByZXF1ZXN0c1xuICBuZXR3b3JrSW50ZXJmYWNlLnVzZShbXG4gICAge1xuICAgICAgYXBwbHlNaWRkbGV3YXJlKHJlcSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlcS5vcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICByZXEub3B0aW9ucy5oZWFkZXJzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgdGhlIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZyb20gbG9jYWwgc3RvcmFnZSBpZiBpdCBleGlzdHNcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYXV0aDBJZFRva2VuXCIpKSB7XG4gICAgICAgICAgcmVxLm9wdGlvbnMuaGVhZGVycy5hdXRob3JpemF0aW9uID0gYEJlYXJlciAke2xvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYXV0aDBJZFRva2VuXCIpfWA7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG5cbiAgcmV0dXJuIG5ldyBBcG9sbG9DbGllbnQoe1xuICAgIGluaXRpYWxTdGF0ZSxcbiAgICBzc3JNb2RlOiAhcHJvY2Vzcy5icm93c2VyLCAvLyBEaXNhYmxlcyBmb3JjZUZldGNoIG9uIHRoZSBzZXJ2ZXIgKHNvIHF1ZXJpZXMgYXJlIG9ubHkgcnVuIG9uY2UpXG4gICAgbmV0d29ya0ludGVyZmFjZVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0QXBvbGxvIChpbml0aWFsU3RhdGUpIHtcbiAgLy8gTWFrZSBzdXJlIHRvIGNyZWF0ZSBhIG5ldyBjbGllbnQgZm9yIGV2ZXJ5IHNlcnZlci1zaWRlIHJlcXVlc3Qgc28gdGhhdCBkYXRhXG4gIC8vIGlzbid0IHNoYXJlZCBiZXR3ZWVuIGNvbm5lY3Rpb25zICh3aGljaCB3b3VsZCBiZSBiYWQpXG4gIGlmICghcHJvY2Vzcy5icm93c2VyKSB7XG4gICAgcmV0dXJuIGNyZWF0ZShpbml0aWFsU3RhdGUpXG4gIH1cblxuICAvLyBSZXVzZSBjbGllbnQgb24gdGhlIGNsaWVudC1zaWRlXG4gIGlmICghYXBvbGxvQ2xpZW50KSB7XG4gICAgYXBvbGxvQ2xpZW50ID0gY3JlYXRlKGluaXRpYWxTdGF0ZSlcbiAgfVxuXG4gIHJldHVybiBhcG9sbG9DbGllbnRcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2xpYi9pbml0QXBvbGxvLmpzIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ3JhcGhxbCwgZ3FsLCBjb21wb3NlIH0gZnJvbSAncmVhY3QtYXBvbGxvJ1xuaW1wb3J0IHsgU0lOR0xFX0xJTktfUVVFUlksIFVQREFURV9MSU5LX01VVEFUSU9OIH0gZnJvbSAnLi4vcXVlcmllcyc7XG5cbmNsYXNzIFVwZGF0ZUxpbmsgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIHN0YXRlID0ge1xuICAgIC4uLnRoaXMucHJvcHMuZmluZEl0ZW0uSXRlbSxcbiAgfVxuXG4gIHNhdmVUb1N0YXRlID0gKGUpID0+IHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSwgdHlwZSB9ID0gZS50YXJnZXQ7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cblxuICAgICAgICA8aDI+RWRpdCB7dGhpcy5wcm9wcy5pZH08L2gyPlxuICAgICAgICB7IHRoaXMuc3RhdGUubG9hZGluZyA/ICdMT0FESU5HLi4uJyA6ICdSZWFkeSEnIH1cbiAgICAgICAgPGZvcm0gb25TdWJtaXQ9e3RoaXMuX2NyZWF0ZUxpbmt9PlxuXG4gICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJ0aXRsZVwiPlRpdGxlPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdmFsdWU9e3RoaXMuc3RhdGUudGl0bGV9IG5hbWU9XCJ0aXRsZVwiIG9uQ2hhbmdlPXt0aGlzLnNhdmVUb1N0YXRlfSB0eXBlPSd0ZXh0Jy8+XG5cbiAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImRlc2NyaXB0aW9uXCI+RGVzY3JpcHRpb248L2xhYmVsPlxuICAgICAgICAgIDx0ZXh0YXJlYSB2YWx1ZT17dGhpcy5zdGF0ZS5kZXNjcmlwdGlvbn0gbmFtZT1cImRlc2NyaXB0aW9uXCIgb25DaGFuZ2U9e3RoaXMuc2F2ZVRvU3RhdGV9PjwvdGV4dGFyZWE+XG5cbiAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInByaWNlXCI+UHJpY2U8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbmFtZT1cInByaWNlXCIgb25DaGFuZ2U9e3RoaXMuc2F2ZVRvU3RhdGV9IHZhbHVlPXt0aGlzLnN0YXRlLnByaWNlfSAvPlxuXG4gICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJmdWxsUHJpY2VcIj5GdWxsIFByaWNlPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG5hbWU9XCJmdWxsUHJpY2VcIiBvbkNoYW5nZT17dGhpcy5zYXZlVG9TdGF0ZX0gdmFsdWU9e3RoaXMuc3RhdGUuZnVsbFByaWNlfSAvPlxuXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCI+U2F2ZS4uLjwvYnV0dG9uPlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICBfY3JlYXRlTGluayA9IGFzeW5jIChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vIHB1bGwgdGhlIHZhbHVlcyBmcm9tIHN0YXRlXG4gICAgY29uc3QgeyBkZXNjcmlwdGlvbiwgdGl0bGUgfSA9IHRoaXMuc3RhdGVcbiAgICBjb25zdCB7IGlkIH0gPSB0aGlzLnByb3BzO1xuICAgIC8vIGNyZWF0ZSBhIG11dGF0aW9uXG4gICAgLy8gVE9ETzogaGFuZGxlIGFueSBlcnJvcnNcbiAgICAvLyB0dXJuIGxvYWRpbmcgb25cbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSB9KTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YXRlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnByb3BzLnVwZGF0ZUl0ZW0oe1xuICAgICAgLy8gcGFzcyBpbiB0aG9zZSB2YXJpYWJsZXMgZnJvbSBzdGF0ZVxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XG4gIH1cblxufVxuXG5jb25zdCBDb21wb25lbnRXaXRoTXV0YXRpb25zID0gY29tcG9zZShcbiAgLy8gRmlyc3QsIHF1ZXJ5IGZvciBnZXR0aW5nIHRoZSBsaW5rXG4gIGdyYXBocWwoU0lOR0xFX0xJTktfUVVFUlksIHtcbiAgICBuYW1lOiAnZmluZEl0ZW0nLFxuICAgIG9wdGlvbnM6ICh7IGlkIH0pID0+ICh7XG4gICAgICB2YXJpYWJsZXM6IHsgaWQgfVxuICAgIH0pXG4gIH0pLFxuICAvLyBTZWNvbmQsIHRoZSBtdXRhdGlvbiBmb3IgdXBkYXRpbmcgdGhlIGxpbmtcbiAgZ3JhcGhxbChVUERBVEVfTElOS19NVVRBVElPTiwgeyBuYW1lOiAndXBkYXRlSXRlbScgfSlcbikoVXBkYXRlTGluayk7XG5cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50V2l0aE11dGF0aW9ucztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvVXBkYXRlSXRlbS5qcyIsImltcG9ydCB7IGdxbCB9IGZyb20gJ3JlYWN0LWFwb2xsbyc7XG5cbmV4cG9ydCBjb25zdCBpdGVtRGV0YWlscyA9IGdxbGBcbiAgZnJhZ21lbnQgaXRlbURldGFpbHMgb24gSXRlbSB7XG4gICAgICBpZFxuICAgICAgdGl0bGVcbiAgICAgIHByaWNlXG4gICAgICBmdWxsUHJpY2VcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgICBpbWFnZSB7XG4gICAgICAgIGlkXG4gICAgICAgIHVybFxuICAgICAgICBzZWNyZXRcbiAgICAgIH1cbiAgfVxuYDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3F1ZXJpZXMvZnJhZ21lbnRzLmpzIiwiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFN0cmlwZUNoZWNrb3V0IGZyb20gJ3JlYWN0LXN0cmlwZS1jaGVja291dCc7XG5pbXBvcnQgeyBDUkVBVEVfT1JERVJfTVVUQVRJT04sIENVUlJFTlRfVVNFUl9RVUVSWSB9IGZyb20gJy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgZ3JhcGhxbCwgY29tcG9zZSB9IGZyb20gJ3JlYWN0LWFwb2xsbyc7XG5cblxuY2xhc3MgVGFrZU15TW9uZXkgZXh0ZW5kcyBDb21wb25lbnQge1xuICBvblRva2VuID0gYXN5bmMgKHJlcykgPT4ge1xuICAgIGNvbnN0IHRva2VuID0gcmVzLmlkO1xuICAgIGNvbnN0IHVzZXJJZCA9IHRoaXMucHJvcHMuY3VycmVudFVzZXJRdWVyeS51c2VyLmlkO1xuICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMucHJvcHMuaWQ7XG4gICAgY29uc29sZS5sb2coYEdvaW5nIHRvIG1ha2UgYSBwdXJjaGFzZSB3aXRoICR7dG9rZW59YCk7XG4gICAgY29uc29sZS5sb2coYFRIZSBwZXJzb24gdGhhdCBib3VnaHQgdGhpcyB3YXMgJHt1c2VySWR9YClcbiAgICBjb25zb2xlLmxvZyhgVGhlIGl0ZW0gaWQgaXMgJHtpdGVtSWR9YClcbiAgICBjb25zdCBjaGFyZ2UgPSBhd2FpdCB0aGlzLnByb3BzLmNyZWF0ZU9yZGVyKHsgdmFyaWFibGVzOiB7IHRva2VuLCB1c2VySWQsIGl0ZW1JZCB9fSk7XG4gICAgYWxlcnQoYEJhY2sgZnJvbSB0aGUgY2hhcmdlISAke2NoYXJnZS5pZH1gKTtcbiAgICBjb25zb2xlLmxvZyhjaGFyZ2UpO1xuXG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnByb3BzLmN1cnJlbnRVc2VyUXVlcnkudXNlciB8fCB7fTtcbiAgICBjb25zdCBlbWFpbCA9IHVzZXIuZW1haWwgfHwgJyc7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxTdHJpcGVDaGVja291dFxuICAgICAgICAgIGFtb3VudD17dGhpcy5wcm9wcy5hbW91bnR9XG4gICAgICAgICAgbmFtZT17dGhpcy5wcm9wcy5uYW1lfVxuICAgICAgICAgIGRlc2NyaXB0aW9uPXt0aGlzLnByb3BzLmRlc2NyaXB0aW9ufVxuICAgICAgICAgIHRva2VuPXt0aGlzLm9uVG9rZW59XG4gICAgICAgICAgc3RyaXBlS2V5PVwicGtfbGNsVHRUaEZwOENuTzNRdEVaU2Q4SEE5bUZVcHNcIlxuICAgICAgICAgIGN1cnJlbmN5PVwiVVNEXCJcbiAgICAgICAgICBlbWFpbD17ZW1haWx9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPC9TdHJpcGVDaGVja291dD5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufVxuXG5jb25zdCB1c2VyRW5oYW5jZXIgPSBncmFwaHFsKENVUlJFTlRfVVNFUl9RVUVSWSwgeyBuYW1lOiAnY3VycmVudFVzZXJRdWVyeScgfSk7XG5jb25zdCBjcmVhdGVPcmRlckVuaGFuY2VyID0gZ3JhcGhxbChDUkVBVEVfT1JERVJfTVVUQVRJT04sIHsgbmFtZTogJ2NyZWF0ZU9yZGVyJyB9KTtcbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UodXNlckVuaGFuY2VyLCBjcmVhdGVPcmRlckVuaGFuY2VyKShUYWtlTXlNb25leSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb21wb25lbnRzL1Rha2VNeU1vbmV5LmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYW1vdW50KSB7XG4gIHJldHVybiAnJCcgKyAgKGFtb3VudCAvIDEwMCkudG9Mb2NhbGVTdHJpbmcoKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2xpYi9mb3JtYXRNb25leS5qcyIsIi8vIFRPRE86IFB1dCB0aGUgcHJvamVjdCBJRCBpbiBhIGNvbmZpZyBmaWxlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW1hZ2UsIHdpZHRoID0gMzAwLCBoZWlnaHQgPSAzMDApIHtcbiAgaWYoIWltYWdlIHx8ICFpbWFnZS5zZWNyZXQpIHJldHVybiAnJztcbiAgcmV0dXJuIGBodHRwczovL2ltYWdlcy5ncmFwaC5jb29sL3YxL2NqNXh6OHN6czI4OTMwMTQ1Z2N0ODJiZGovJHtpbWFnZS5zZWNyZXR9LyR7d2lkdGh9eCR7aGVpZ2h0fWA7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9saWIvaW1hZ2UuanMiLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdyYXBocWwsIGNvbXBvc2UgfSBmcm9tICdyZWFjdC1hcG9sbG8nXG5pbXBvcnQgeyBDVVJSRU5UX1VTRVJfUVVFUlkgfSBmcm9tICcuLi9xdWVyaWVzJztcblxuY2xhc3MgSGVhZGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAvLyBUaGlzIGZldGNoZXMgdGhlIG5ldyBkYXRhLCBidXQgZG9lc24ndCBwb3B1bGF0ZSB0aGUgdXNlciB2aWEgcHJvcHNcbiAgICAvLyB0aGlzLnByb3BzLmN1cnJlbnRVc2VyUXVlcnkucmVmZXRjaCgpO1xuICAgIC8vIFRoaXMgZmV0Y2hlcyB0aGUgbmV3IGRhdGEsIGFuZCBwb3B1bGF0ZXMgdGhlIHVzZXIgdmlhIHByb3BzXG4gICAgc2V0VGltZW91dCh0aGlzLnByb3BzLmN1cnJlbnRVc2VyUXVlcnkucmVmZXRjaCwgMSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc29sZS5sb2codGhpcy5wcm9wcy5jdXJyZW50VXNlclF1ZXJ5LnVzZXIpO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnByb3BzLmN1cnJlbnRVc2VyUXVlcnkudXNlciB8fCB7fTtcbiAgICBjb25zdCB7IGVtYWlsID0gJycgfSA9IHVzZXI7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPHA+e2VtYWlsfSBJJ20gdGhlIGhlYWRlciE8L3A+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbn1cblxuY29uc3QgdXNlckVuaGFuY2VyID0gZ3JhcGhxbChDVVJSRU5UX1VTRVJfUVVFUlksIHsgbmFtZTogJ2N1cnJlbnRVc2VyUXVlcnknIH0pO1xuZXhwb3J0IGRlZmF1bHQgY29tcG9zZSh1c2VyRW5oYW5jZXIpKEhlYWRlcilcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvSGVhZGVyLmpzIiwiaW1wb3J0IEhlYWQgZnJvbSAnbmV4dC9oZWFkJ1xuaW1wb3J0IFJvdXRlciBmcm9tICduZXh0L3JvdXRlcidcbmltcG9ydCBOYXYgZnJvbSAnLi9OYXYnO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoXG4gIDxkaXY+XG4gICAgPEhlYWQ+XG4gICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIiAvPlxuICAgICAgPG1ldGEgY2hhclNldD1cInV0Zi04XCIgLz5cbiAgICAgIDxOYXYvPlxuICAgICAgPGxpbmsgcmVsPVwic2hvcnRjdXQgaWNvblwiIGhyZWY9XCJodHRwczovL3dlc2Jvcy5jb20vd3AtY29udGVudC90aGVtZXMvd2IyMDE0L2kvY3Jvd24teWVsbG93LXNtYWxsLnBuZ1wiIC8+XG4gICAgICA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNy4wL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzc1wiLz5cbiAgICAgIDx0aXRsZT5TaWNrIEZpdHM8L3RpdGxlPlxuICAgIDwvSGVhZD5cbiAgPC9kaXY+XG4pXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb21wb25lbnRzL01ldGEuanMiLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSXRlbXMgZnJvbSAnLi4vY29tcG9uZW50cy9JdGVtcyc7XG5pbXBvcnQgQ3JlYXRlSXRlbSBmcm9tICcuLi9jb21wb25lbnRzL0NyZWF0ZUl0ZW0nO1xuaW1wb3J0IENvdW50IGZyb20gJy4uL2NvbXBvbmVudHMvQ291bnQnO1xuaW1wb3J0IExvZ2luQXV0aDAgZnJvbSAnLi4vY29tcG9uZW50cy9Mb2dpbkF1dGgwJztcbmltcG9ydCBIZWFkZXIgZnJvbSAnLi4vY29tcG9uZW50cy9IZWFkZXInO1xuaW1wb3J0IFBhZ2UgZnJvbSAnLi4vY29tcG9uZW50cy9QYWdlJztcblxuY2xhc3MgSG9tZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFBhZ2U+XG4gICAgICAgIDxMb2dpbkF1dGgwIC8+XG4gICAgICAgIDxDb3VudC8+XG4gICAgICAgIDxDcmVhdGVJdGVtIC8+XG4gICAgICAgIDxJdGVtcz48L0l0ZW1zPlxuICAgICAgPC9QYWdlPlxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIb21lO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFnZXM/ZW50cnkiLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBncmFwaHFsLCBncWwgfSBmcm9tICdyZWFjdC1hcG9sbG8nXG5cbmltcG9ydCB7IEFMTF9JVEVNU19RVUVSWSB9IGZyb20gJy4uL3F1ZXJpZXMnO1xuXG5jbGFzcyBDb3VudCBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgcmVuZGVyKCkge1xuXG4gICAgLy8gMVxuICAgIGlmICh0aGlzLnByb3BzLmFsbExpbmtzUXVlcnkgJiYgdGhpcy5wcm9wcy5hbGxMaW5rc1F1ZXJ5LmxvYWRpbmcpIHtcbiAgICAgIHJldHVybiA8ZGl2PkxvYWRpbmc8L2Rpdj5cbiAgICB9XG5cbiAgICAvLyAyXG4gICAgaWYgKHRoaXMucHJvcHMuYWxsTGlua3NRdWVyeSAmJiB0aGlzLnByb3BzLmFsbExpbmtzUXVlcnkuZXJyb3IpIHtcbiAgICAgIHJldHVybiA8ZGl2PkVycm9yPC9kaXY+XG4gICAgfVxuXG4gICAgLy8gM1xuICAgIGNvbnN0IGl0ZW1zVG9SZW5kZXIgPSB0aGlzLnByb3BzLmFsbExpbmtzUXVlcnkuYWxsSXRlbXNcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8aDE+VGhlcmUgYXJlIHtpdGVtc1RvUmVuZGVyLmxlbmd0aH0gaXRlbXMgZm9yIHNhbGU8L2gxPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbn1cblxuLy8gMVxuXG4vLyBXZSBleHBvcnQgdGhlIGdyYXBoUUwgSE9DIC0gdGhpcyB3aWxsIGZldGNoIHRoZSBkYXRhIGFuZCBpbmplY3QgaXQgaW50byB0aGUgQ291bnQgY29tcGVvbnQgdmlhIHByb3BzXG5cbmV4cG9ydCB7IEFMTF9JVEVNU19RVUVSWSB9XG5leHBvcnQgZGVmYXVsdCBncmFwaHFsKEFMTF9JVEVNU19RVUVSWSwgeyBuYW1lOiAnYWxsTGlua3NRdWVyeScgfSkgKENvdW50KVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY29tcG9uZW50cy9Db3VudC5qcyJdLCJtYXBwaW5ncyI6IjtBOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FBREE7QUFDQTtBQWFBO0FBQ0E7QUFhQTtBQUNBO0FBb0JBO0FBQ0E7QUFVQTtBQUNBO0FBUUE7QUFDQTtBQVNBO0FBQ0E7QUFjQTtBQUNBO0FBU0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1R0E7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFDQTs7QUFEQTtBQUFBO0FBTUE7QUFOQTtBQUFBO0FBQUE7QUFBQTtBQU9BO0FBUEE7QUFDQTtBQVNBO0FBQ0E7QUFYQTtBQUNBO0FBVUE7QUFYQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBWUE7QUFDQTtBQURBO0FBWkE7QUFDQTtBQURBO0FBaUJBO0FBakJBO0FBQUE7QUFrQkE7QUFDQTtBQW5CQTtBQW9CQTtBQUNBO0FBckJBO0FBQUE7QUFBQTtBQXdCQTtBQUFBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUExQkE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQWdDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUF0Q0E7QUFDQTs7O0FBMENBO0FBQUE7QUFEQTtBQURBO0FBQ0E7QUExQ0E7O0FBQUE7QUFpREE7QUFDQTtBQWxEQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBc0RBO0FBdERBO0FBQ0E7QUFxREE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUF6REE7QUFDQTs7QUFEQTtBQTREQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQUE7O0FBQ0E7QUFHQTtBQUhBO0FBQUE7QUE5REE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUdBO0FBQUE7QUFKQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWkE7QUFDQTs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUNBO0FBQ0E7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBS0E7QUFDQTtBQU9BOzs7Ozs7Ozs7OztBQUVBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7QUFBQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFEQTtBQURBO0FBSUE7QUFKQTtBQUlBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTs7QUFMQTtBQU9BO0FBUEE7QUFPQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BOzs7OztBQWhEQTtBQUNBO0FBbURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBOztBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBTUE7QUFmQTtBQUZBO0FBQ0E7QUFnQkE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVHQTtBQUNBOzs7QUFBQTtBQUNBO0FBQUE7QUFDQTs7Ozs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBTEE7QUFZQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBTEE7QUFBQTtBQU9BO0FBRUE7QUFBQTtBQURBO0FBQ0E7QUFGQTtBQVBBO0FBQUE7QUFXQTtBQUNBO0FBREE7QUFYQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBZEE7QUFBQTtBQUFBOztBQUFBO0FBQUE7Ozs7OztBQXlDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQVBBO0FBUUE7QUFFQTs7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBSkE7QUFGQTtBQUNBO0FBRkE7QUFSQTtBQUNBO0FBaUJBO0FBQ0E7QUFuQkE7QUFBQTtBQUFBOztBQUFBO0FBQUE7Ozs7Ozs7Ozs7O0FBN0NBO0FBQ0E7Ozs7QUFtQkE7QUFDQTtBQUNBO0FBQUE7O0FBQUE7QUFDQTtBQURBO0FBQUE7QUFFQTtBQUNBO0FBREE7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFGQTtBQUVBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFGQTtBQUVBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTs7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7O0FBSkE7QUFNQTtBQU5BO0FBQ0E7QUFLQTtBQUFBO0FBQUE7QUFJQTs7Ozs7QUF0REE7QUE2RUE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUFBO0FBWEE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZGQTtBQUNBOzs7QUFBQTtBQUNBOzs7Ozs7OztBQUNBO0FBRUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBSkE7QUFLQTtBQUFBO0FBR0E7QUFIQTtBQU1BO0FBQ0E7QUFFQTtBQTVCQTtBQUNBO0FBc0NBO0FBQ0E7QUF0Q0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQUE7QUFEQTtBQUlBOzs7OztBQXFCQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQU9BO0FBQ0E7O0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTs7Ozs7QUFHQTtBQUNBO0FBREE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxREE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQU1BO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBTUE7QUFDQTtBQURBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2QkE7QUFDQTs7Ozs7OztBQURBO0FBQ0E7O0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFKQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDSEE7QUFDQTtBQUFBO0FBQ0E7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBTEE7QUFEQTtBQUNBO0FBTUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBSUE7QUFkQTtBQUNBOztBQWVBO0FBQUE7QUFHQTtBQUpBO0FBTUE7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4REE7QUFDQTs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7Ozs7OztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBNkJBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBR0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQVRBO0FBVUE7QUFFQTtBQUNBO0FBRkE7QUFDQTtBQUZBO0FBVkE7QUFDQTtBQWVBO0FBQ0E7QUFqQkE7QUFBQTtBQUFBOztBQUFBO0FBQUE7Ozs7Ozs7Ozs7O0FBekJBO0FBQ0E7O0FBQUE7QUFFQTtBQUZBO0FBQUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBRkE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUZBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFGQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBRkE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUZBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFJQTs7Ozs7QUF2Q0E7QUFDQTtBQTZEQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlFQTtBQUNBOzs7OztBQURBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNIQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFBQTtBQUNBO0FBQUE7QUFDQTs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFOQTtBQU9BO0FBQ0E7QUFEQTtBQVBBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFWQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7QUFhQTtBQUFBO0FBQ0E7QUFFQTs7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBOztBQVBBO0FBU0E7QUFUQTtBQUNBOzs7OztBQW5CQTtBQUNBO0FBaUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUMzQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNIQTtBQUNBOzs7QUFBQTtBQUNBO0FBQUE7QUFDQTs7Ozs7O0FBQ0E7Ozs7Ozs7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTs7OztBQUlBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBOztBQUFBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBOzs7OztBQWhCQTtBQUNBO0FBcUJBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVCQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFFQTtBQUNBOzs7Ozs7O0FBREE7QUFDQTs7QUFBQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7O0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUkE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0xBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7Ozs7Ozs7O0FBQ0E7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTs7QUFBQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUdBO0FBSEE7QUFBQTs7Ozs7QUFNQTtBQUNBO0FBREE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdEJBO0FBQ0E7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFDQTs7Ozs7Ozs7Ozs7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7QUFBQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFuQkE7QUFDQTtBQXlCQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTs7Ozs7QSIsInNvdXJjZVJvb3QiOiIifQ== return { page: comp.default } })
\ No newline at end of file diff --git a/.next/bundles/pages/orders.js b/.next/bundles/pages/orders.js new file mode 100644 index 0000000..b1bc739 --- /dev/null +++ b/.next/bundles/pages/orders.js @@ -0,0 +1,2192 @@ + + window.__NEXT_REGISTER_PAGE('/orders', function() { + var comp = module.exports = +webpackJsonp([7],{ + +/***/ 557: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.USER_ORDERS_QUERY = exports.CURRENT_USER_QUERY = exports.UPDATE_LINK_MUTATION = exports.DELETE_ITEM_MUTATION = exports.SINGLE_LINK_QUERY = exports.ALL_ITEMS_QUERY = exports.CREATE_ORDER_MUTATION = exports.CREATE_USER_MUTATION = exports.CREATE_LINK_MUTATION = undefined; + +var _taggedTemplateLiteral2 = __webpack_require__(576); + +var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); + +var _reactApollo = __webpack_require__(547); + +var _fragments = __webpack_require__(733); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n ', '\n mutation CreateLinkMutation($description: String!, $title: String!, $imageId: ID, $price: Int!) {\n createItem(\n description: $description,\n title: $title,\n imageId: $imageId\n price: $price\n ) {\n ...itemDetails\n }\n }\n'], ['\n ', '\n mutation CreateLinkMutation($description: String!, $title: String!, $imageId: ID, $price: Int!) {\n createItem(\n description: $description,\n title: $title,\n imageId: $imageId\n price: $price\n ) {\n ...itemDetails\n }\n }\n']), + _templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n mutation CreateUserMutation($email: String!, $name: String!, $idToken: String!) {\n createUser(\n email: $email,\n name: $name,\n authProvider: { auth0: { idToken: $idToken } }\n ) {\n id,\n email,\n name\n }\n }\n'], ['\n mutation CreateUserMutation($email: String!, $name: String!, $idToken: String!) {\n createUser(\n email: $email,\n name: $name,\n authProvider: { auth0: { idToken: $idToken } }\n ) {\n id,\n email,\n name\n }\n }\n']), + _templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n mutation CreateOrderMutation($token: String!, $userId: ID!, $itemId: ID!) {\n createOrder(token: $token, userId: $userId, itemId: $itemId) {\n id\n token\n charge\n amount\n item {\n id\n title\n description\n }\n user {\n id\n email\n }\n }\n }\n'], ['\n mutation CreateOrderMutation($token: String!, $userId: ID!, $itemId: ID!) {\n createOrder(token: $token, userId: $userId, itemId: $itemId) {\n id\n token\n charge\n amount\n item {\n id\n title\n description\n }\n user {\n id\n email\n }\n }\n }\n']), + _templateObject4 = (0, _taggedTemplateLiteral3.default)(['\n # Import the Fragment\n ', '\n query AllLinksQuery {\n allItems(orderBy: createdAt_DESC) {\n # Use that fragment by it\'s name (even though it the same as the variable)\n ...itemDetails\n }\n }\n'], ['\n # Import the Fragment\n ', '\n query AllLinksQuery {\n allItems(orderBy: createdAt_DESC) {\n # Use that fragment by it\'s name (even though it the same as the variable)\n ...itemDetails\n }\n }\n']), + _templateObject5 = (0, _taggedTemplateLiteral3.default)(['\n ', '\n query FindItem($id: ID!) {\n Item(id: $id) {\n ...itemDetails\n }\n }\n'], ['\n ', '\n query FindItem($id: ID!) {\n Item(id: $id) {\n ...itemDetails\n }\n }\n']), + _templateObject6 = (0, _taggedTemplateLiteral3.default)(['\n mutation DelteItem($id: ID!) {\n deleteItem(id: $id) {\n id,\n title,\n description\n }\n }\n'], ['\n mutation DelteItem($id: ID!) {\n deleteItem(id: $id) {\n id,\n title,\n description\n }\n }\n']), + _templateObject7 = (0, _taggedTemplateLiteral3.default)(['\n ', '\n mutation UpdateItem($id: ID!, $title: String!, $description: String!, $price: Int!, $fullPrice: Int!) {\n updateItem(\n id: $id,\n description: $description,\n title: $title,\n price: $price,\n fullPrice: $fullPrice\n ) {\n ...itemDetails\n }\n }\n'], ['\n ', '\n mutation UpdateItem($id: ID!, $title: String!, $description: String!, $price: Int!, $fullPrice: Int!) {\n updateItem(\n id: $id,\n description: $description,\n title: $title,\n price: $price,\n fullPrice: $fullPrice\n ) {\n ...itemDetails\n }\n }\n']), + _templateObject8 = (0, _taggedTemplateLiteral3.default)(['\n query userQuery {\n user {\n id\n name\n email\n }\n }\n'], ['\n query userQuery {\n user {\n id\n name\n email\n }\n }\n']), + _templateObject9 = (0, _taggedTemplateLiteral3.default)(['\n query {\n user { # grab the current user\n id\n orders { # and a all their orders\n id\n amount\n charge\n item { # populate the details about the item they bought with the image, description and title\n image {\n id,\n secret\n }\n description\n title\n }\n }\n }\n }\n'], ['\n query {\n user { # grab the current user\n id\n orders { # and a all their orders\n id\n amount\n charge\n item { # populate the details about the item they bought with the image, description and title\n image {\n id,\n secret\n }\n description\n title\n }\n }\n }\n }\n']); + +var CREATE_LINK_MUTATION = exports.CREATE_LINK_MUTATION = (0, _reactApollo.gql)(_templateObject, _fragments.itemDetails); + +var CREATE_USER_MUTATION = exports.CREATE_USER_MUTATION = (0, _reactApollo.gql)(_templateObject2); + +var CREATE_ORDER_MUTATION = exports.CREATE_ORDER_MUTATION = (0, _reactApollo.gql)(_templateObject3); + +var ALL_ITEMS_QUERY = exports.ALL_ITEMS_QUERY = (0, _reactApollo.gql)(_templateObject4, _fragments.itemDetails); + +var SINGLE_LINK_QUERY = exports.SINGLE_LINK_QUERY = (0, _reactApollo.gql)(_templateObject5, _fragments.itemDetails); + +var DELETE_ITEM_MUTATION = exports.DELETE_ITEM_MUTATION = (0, _reactApollo.gql)(_templateObject6); + +var UPDATE_LINK_MUTATION = exports.UPDATE_LINK_MUTATION = (0, _reactApollo.gql)(_templateObject7, _fragments.itemDetails); + +var CURRENT_USER_QUERY = exports.CURRENT_USER_QUERY = (0, _reactApollo.gql)(_templateObject8); + +var USER_ORDERS_QUERY = exports.USER_ORDERS_QUERY = (0, _reactApollo.gql)(_templateObject9); + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/queries/index.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/queries/index.js"); } } })(); + +/***/ }), + +/***/ 586: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _regenerator = __webpack_require__(75); + +var _regenerator2 = _interopRequireDefault(_regenerator); + +var _extends2 = __webpack_require__(112); + +var _extends3 = _interopRequireDefault(_extends2); + +var _asyncToGenerator2 = __webpack_require__(76); + +var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(63); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _reactApollo = __webpack_require__(547); + +var _head = __webpack_require__(226); + +var _head2 = _interopRequireDefault(_head); + +var _initApollo = __webpack_require__(723); + +var _initApollo2 = _interopRequireDefault(_initApollo); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/lib/withData.js'; + + +// Gets the display name of a JSX component for dev tools +function getComponentDisplayName(Component) { + return Component.displayName || Component.name || 'Unknown'; +} + +exports.default = function (ComposedComponent) { + var _class, _temp; + + return _temp = _class = function (_React$Component) { + (0, _inherits3.default)(WithData, _React$Component); + + (0, _createClass3.default)(WithData, null, [{ + key: 'getInitialProps', + value: function () { + var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) { + var serverState, composedInitialProps, apollo, url, state; + return _regenerator2.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + serverState = {}; + + // Evaluate the composed component's getInitialProps() + + composedInitialProps = {}; + + if (!ComposedComponent.getInitialProps) { + _context.next = 6; + break; + } + + _context.next = 5; + return ComposedComponent.getInitialProps(ctx); + + case 5: + composedInitialProps = _context.sent; + + case 6: + if (process.browser) { + _context.next = 19; + break; + } + + apollo = (0, _initApollo2.default)(); + // Provide the `url` prop data in case a GraphQL query uses it + + url = { query: ctx.query, pathname: ctx.pathname }; + _context.prev = 9; + _context.next = 12; + return (0, _reactApollo.getDataFromTree)(_react2.default.createElement(_reactApollo.ApolloProvider, { client: apollo, __source: { + fileName: _jsxFileName, + lineNumber: 37 + } + }, _react2.default.createElement(ComposedComponent, (0, _extends3.default)({ url: url }, composedInitialProps, { + __source: { + fileName: _jsxFileName, + lineNumber: 38 + } + })))); + + case 12: + _context.next = 16; + break; + + case 14: + _context.prev = 14; + _context.t0 = _context['catch'](9); + + case 16: + // getDataFromTree does not call componentWillUnmount + // head side effect therefore need to be cleared manually + _head2.default.rewind(); + + // Extract query data from the Apollo store + state = apollo.getInitialState(); + + serverState = { + apollo: { + // Only include the Apollo data state + data: state.data + } + }; + + case 19: + return _context.abrupt('return', (0, _extends3.default)({ + serverState: serverState + }, composedInitialProps)); + + case 20: + case 'end': + return _context.stop(); + } + } + }, _callee, this, [[9, 14]]); + })); + + function getInitialProps(_x) { + return _ref.apply(this, arguments); + } + + return getInitialProps; + }() + }]); + + function WithData(props) { + (0, _classCallCheck3.default)(this, WithData); + + var _this = (0, _possibleConstructorReturn3.default)(this, (WithData.__proto__ || (0, _getPrototypeOf2.default)(WithData)).call(this, props)); + + _this.apollo = (0, _initApollo2.default)(_this.props.serverState); + return _this; + } + + (0, _createClass3.default)(WithData, [{ + key: 'render', + value: function render() { + return _react2.default.createElement(_reactApollo.ApolloProvider, { client: this.apollo, __source: { + fileName: _jsxFileName, + lineNumber: 74 + } + }, _react2.default.createElement(ComposedComponent, (0, _extends3.default)({}, this.props, { + __source: { + fileName: _jsxFileName, + lineNumber: 75 + } + }))); + } + }]); + + return WithData; + }(_react2.default.Component), _class.displayName = 'WithData(' + getComponentDisplayName(ComposedComponent) + ')', _class.propTypes = { + serverState: _propTypes2.default.object.isRequired + }, _temp; +}; + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/lib/withData.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/lib/withData.js"); } } })(); +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(54))) + +/***/ }), + +/***/ 635: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _taggedTemplateLiteral2 = __webpack_require__(576); + +var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _reactApollo = __webpack_require__(547); + +var _UpdateItem = __webpack_require__(731); + +var _UpdateItem2 = _interopRequireDefault(_UpdateItem); + +var _link = __webpack_require__(636); + +var _link2 = _interopRequireDefault(_link); + +var _styledComponents = __webpack_require__(641); + +var _styledComponents2 = _interopRequireDefault(_styledComponents); + +var _TakeMyMoney = __webpack_require__(750); + +var _TakeMyMoney2 = _interopRequireDefault(_TakeMyMoney); + +var _formatMoney = __webpack_require__(752); + +var _formatMoney2 = _interopRequireDefault(_formatMoney); + +var _image = __webpack_require__(753); + +var _image2 = _interopRequireDefault(_image); + +var _queries = __webpack_require__(557); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/Items.js'; + +var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n font-size: 50px;\n'], ['\n font-size: 50px;\n']), + _templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n display: grid;\n grid-template-columns: repeat(4, calc(25% - 20px));\n grid-gap: 20px;\n'], ['\n display: grid;\n grid-template-columns: repeat(4, calc(25% - 20px));\n grid-gap: 20px;\n']), + _templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n background: #f3f3f3;\n padding: 20px;\n img {\n width: 100%;\n }\n'], ['\n background: #f3f3f3;\n padding: 20px;\n img {\n width: 100%;\n }\n']); + +var Title = _styledComponents2.default.h1(_templateObject); + +var Items = _styledComponents2.default.div(_templateObject2); + +var Item = _styledComponents2.default.div(_templateObject3); + +var ItemList = function (_Component) { + (0, _inherits3.default)(ItemList, _Component); + + function ItemList() { + (0, _classCallCheck3.default)(this, ItemList); + + return (0, _possibleConstructorReturn3.default)(this, (ItemList.__proto__ || (0, _getPrototypeOf2.default)(ItemList)).apply(this, arguments)); + } + + (0, _createClass3.default)(ItemList, [{ + key: 'render', + value: function render() { + var _this2 = this; + + // 1 + if (this.props.allLinksQuery && this.props.allLinksQuery.loading) { + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 38 + } + }, 'Loading'); + } + + // 2 + if (this.props.allLinksQuery && this.props.allLinksQuery.error) { + console.log(this.props.allLinksQuery.error); + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 44 + } + }, 'Error'); + } + + // 3 + var itemsToRender = this.props.allLinksQuery.allItems; + + return _react2.default.createElement(Items, { + __source: { + fileName: _jsxFileName, + lineNumber: 51 + } + }, _react2.default.createElement(Title, { + __source: { + fileName: _jsxFileName, + lineNumber: 52 + } + }, 'Items For Sale'), itemsToRender.map(function (item, i) { + return _react2.default.createElement(Item, { className: 'item', key: i, __source: { + fileName: _jsxFileName, + lineNumber: 54 + } + }, item.image ? _react2.default.createElement('img', { src: (0, _image2.default)(item.image), __source: { + fileName: _jsxFileName, + lineNumber: 55 + } + }) : null, _react2.default.createElement('h3', { + __source: { + fileName: _jsxFileName, + lineNumber: 56 + } + }, item.title), _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 57 + } + }, item.description), _react2.default.createElement(_link2.default, { href: { + pathname: '/admin/update', + query: { id: item.id } + }, __source: { + fileName: _jsxFileName, + lineNumber: 58 + } + }, _react2.default.createElement('a', { + __source: { + fileName: _jsxFileName, + lineNumber: 62 + } + }, 'Edit ', item.id)), _react2.default.createElement(_TakeMyMoney2.default, { + id: item.id, + amount: item.price, + name: item.title // the pop-in header title + , description: item.description // the pop-in header subtitle + , image: (0, _image2.default)(item.image), + __source: { + fileName: _jsxFileName, + lineNumber: 65 + } + }, _react2.default.createElement('button', { + __source: { + fileName: _jsxFileName, + lineNumber: 72 + } + }, 'Buy for ', (0, _formatMoney2.default)(item.price))), _react2.default.createElement('button', { onClick: function onClick() { + return _this2.props.removeItemMutation({ variables: { id: item.id } }); + }, __source: { + fileName: _jsxFileName, + lineNumber: 74 + } + }, '\xD7 Delete item')); + })); + } + }]); + + return ItemList; +}(_react.Component); + +// 1 + +// We export the graphQL HOC - this will fetch the data and inject it into the ItemList compeont via props + +// Create some Enhancers + + +var itemsEnahncer = (0, _reactApollo.graphql)(_queries.ALL_ITEMS_QUERY, { name: 'allLinksQuery' }); +var deleteItemEnhancer = (0, _reactApollo.graphql)(_queries.DELETE_ITEM_MUTATION, { + name: 'removeItemMutation', + options: { + update: function update(proxy, _ref) { + var deleteItem = _ref.data.deleteItem; + + // grab the data from our cache + var data = proxy.readQuery({ query: _queries.ALL_ITEMS_QUERY }); + + // filter out the delted item + data.allItems = data.allItems.filter(function (item) { + return item.id !== deleteItem.id; + }); + + // and then "set state" (update cache), so it will update whereever we have used this data on the page + proxy.writeQuery({ query: _queries.ALL_ITEMS_QUERY, data: data }); + } + } +}); + +exports.default = (0, _reactApollo.compose)(itemsEnahncer, deleteItemEnhancer)(ItemList); + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/Items.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/Items.js"); } } })(); + +/***/ }), + +/***/ 642: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _regenerator = __webpack_require__(75); + +var _regenerator2 = _interopRequireDefault(_regenerator); + +var _asyncToGenerator2 = __webpack_require__(76); + +var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _reactApollo = __webpack_require__(547); + +var _queries = __webpack_require__(557); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/CreateItem.js'; + + +var CreateLink = function (_Component) { + (0, _inherits3.default)(CreateLink, _Component); + + function CreateLink() { + var _ref, + _this2 = this; + + var _temp, _this, _ret; + + (0, _classCallCheck3.default)(this, CreateLink); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = CreateLink.__proto__ || (0, _getPrototypeOf2.default)(CreateLink)).call.apply(_ref, [this].concat(args))), _this), _this.state = { + description: '', + title: '', + image: '', + price: 0, + fullPrice: 0, + loading: false + }, _this.uploadFile = function () { + var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(e) { + var files, data, res, file; + return _regenerator2.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + files = e.currentTarget.files; + data = new FormData(); + + data.append('data', files[0]); + + // use the file endpoint + _context.next = 5; + return fetch('https://api.graph.cool/file/v1/cj5xz8szs28930145gct82bdj', { + method: 'POST', + body: data + }); + + case 5: + res = _context.sent; + _context.next = 8; + return res.json(); + + case 8: + file = _context.sent; + + console.log(file); + _this.setState({ image: file.id }); + + case 11: + case 'end': + return _context.stop(); + } + } + }, _callee, _this2); + })); + + return function (_x) { + return _ref2.apply(this, arguments); + }; + }(), _this._createLink = function () { + var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(e) { + var _this$state, description, title, image, price, fullPrice, res; + + return _regenerator2.default.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + e.preventDefault(); + // pull the values from state + _this$state = _this.state, description = _this$state.description, title = _this$state.title, image = _this$state.image, price = _this$state.price, fullPrice = _this$state.fullPrice; + // create a mutation + // TODO: handle any errors + // turn loading on + + _this.setState({ loading: true }); + _context2.next = 5; + return _this.props.createLinkMutation({ + // pass in those variables from state + variables: { + description: description, + title: title, + price: parseInt(price), + fullPrice: fullPrice, + imageId: image + } + }); + + case 5: + res = _context2.sent; + + _this.setState({ loading: false }); + + case 7: + case 'end': + return _context2.stop(); + } + } + }, _callee2, _this2); + })); + + return function (_x2) { + return _ref3.apply(this, arguments); + }; + }(), _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); + } + + (0, _createClass3.default)(CreateLink, [{ + key: 'componentWillReceiveProps', + value: function componentWillReceiveProps(nextProps) { + console.log(nextProps); + } + }, { + key: 'render', + value: function render() { + var _this3 = this; + + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 38 + } + }, this.state.loading ? 'LOADING...' : 'Ready!', _react2.default.createElement('form', { onSubmit: this._createLink, __source: { + fileName: _jsxFileName, + lineNumber: 40 + } + }, _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 41 + } + }, 'Image', _react2.default.createElement('input', { onChange: this.uploadFile, type: 'file', __source: { + fileName: _jsxFileName, + lineNumber: 43 + } + })), _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 45 + } + }, 'Title', _react2.default.createElement('input', { value: this.state.title, onChange: function onChange(e) { + return _this3.setState({ title: e.target.value }); + }, type: 'text', placeholder: 'A description for the link', __source: { + fileName: _jsxFileName, + lineNumber: 46 + } + })), _react2.default.createElement('label', { + __source: { + fileName: _jsxFileName, + lineNumber: 48 + } + }, 'Price', _react2.default.createElement('input', { type: 'number', min: '0', value: this.state.price, onChange: function onChange(e) { + return _this3.setState({ price: e.target.value }); + }, __source: { + fileName: _jsxFileName, + lineNumber: 48 + } + })), _react2.default.createElement('textarea', { + value: this.state.description, + onChange: function onChange(e) { + return _this3.setState({ description: e.target.value }); + }, + type: 'text', + placeholder: 'The desc for this item', + __source: { + fileName: _jsxFileName, + lineNumber: 49 + } + }), _react2.default.createElement('button', { type: 'submit', __source: { + fileName: _jsxFileName, + lineNumber: 55 + } + }, 'Submit'))); + } + }]); + + return CreateLink; +}(_react.Component); +// When we submit this mutation, we need to update our store - we have a few ways to do that: +// One - we can go nucular and run refetchQueries() which will just go get everything - this is easy, but at the cost of efficiency. + + +exports.default = (0, _reactApollo.graphql)(_queries.CREATE_LINK_MUTATION, { name: 'createLinkMutation', options: { + // Easy, but slow + // refetchQueries: ['AllLinksQuery'] + // This is much Better / efficient + // Notice how the variable is called createItem - that is because createItem is the name of the query! + update: function update(proxy, _ref4) { + var createItem = _ref4.data.createItem; + + console.log({ createItem: createItem, ALL_ITEMS_QUERY: _queries.ALL_ITEMS_QUERY }); + var data = proxy.readQuery({ query: _queries.ALL_ITEMS_QUERY }); + // data is our store, allItems is our sub-"state", it's just an array. We can just add it to + data.allItems.unshift(createItem); + // and then "set state", so it will update on the page. This will update the cache for us! + proxy.writeQuery({ query: _queries.ALL_ITEMS_QUERY, data: data }); + } + } })(CreateLink); + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/CreateItem.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/CreateItem.js"); } } })(); + +/***/ }), + +/***/ 643: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _regenerator = __webpack_require__(75); + +var _regenerator2 = _interopRequireDefault(_regenerator); + +var _asyncToGenerator2 = __webpack_require__(76); + +var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _reactApollo = __webpack_require__(547); + +var _queries = __webpack_require__(557); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/Signup.js'; + + +var Signup = function (_Component) { + (0, _inherits3.default)(Signup, _Component); + + function Signup() { + (0, _classCallCheck3.default)(this, Signup); + + var _this = (0, _possibleConstructorReturn3.default)(this, (Signup.__proto__ || (0, _getPrototypeOf2.default)(Signup)).call(this)); + + _initialiseProps.call(_this); + + var idToken = typeof window !== 'undefined' ? localStorage.getItem('auth0IdToken') || '' : ''; + _this.state = { + email: '', + name: '', + idToken: idToken, + error: undefined + }; + + return _this; + } + + (0, _createClass3.default)(Signup, [{ + key: 'render', + value: function render() { + var _this2 = this; + + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 22 + } + }, this.state.loading ? 'LOADING...' : 'Ready!', this.state.error ? _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 25 + } + }, this.state.error.message) : '', _react2.default.createElement('form', { onSubmit: this._createUser, __source: { + fileName: _jsxFileName, + lineNumber: 27 + } + }, _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 28 + } + }, 'Email', _react2.default.createElement('input', { value: this.state.email, onChange: function onChange(e) { + return _this2.setState({ email: e.target.value }); + }, type: 'text', placeholder: 'email', __source: { + fileName: _jsxFileName, + lineNumber: 29 + } + })), _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 32 + } + }, 'Name', _react2.default.createElement('input', { value: this.state.name, onChange: function onChange(e) { + return _this2.setState({ name: e.target.value }); + }, type: 'text', placeholder: 'name', __source: { + fileName: _jsxFileName, + lineNumber: 33 + } + })), _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 36 + } + }, 'idToken', _react2.default.createElement('input', { disabled: true, value: this.state.idToken, onChange: function onChange(e) { + return _this2.setState({ idToken: e.target.value }); + }, type: 'text', placeholder: 'name', __source: { + fileName: _jsxFileName, + lineNumber: 37 + } + })), _react2.default.createElement('button', { type: 'submit', __source: { + fileName: _jsxFileName, + lineNumber: 40 + } + }, 'Submit'))); + } + }]); + + return Signup; +}(_react.Component); +// When we submit this mutation, we need to update our store - we have a few ways to do that: +// One - we can go nucular and run refetchQueries() which will just go get everything - this is easy, but at the cost of efficiency. + + +var _initialiseProps = function _initialiseProps() { + var _this3 = this; + + this._createUser = function () { + var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(e) { + var _state, email, name, idToken, res; + + return _regenerator2.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + e.preventDefault(); + // pull the values from state + _state = _this3.state, email = _state.email, name = _state.name, idToken = _state.idToken; + // create a mutation + // TODO: handle any errors + // turn loading on + + _this3.setState({ loading: true }); + console.log(name, email, idToken); + _context.prev = 4; + _context.next = 7; + return _this3.props.createUserMutation({ + // pass in those variables from state + variables: { name: name, email: email, idToken: idToken } + }); + + case 7: + res = _context.sent; + _context.next = 14; + break; + + case 10: + _context.prev = 10; + _context.t0 = _context['catch'](4); + + _this3.setState({ error: _context.t0 }); + console.dir(_context.t0); + + case 14: + _this3.setState({ loading: false }); + + case 15: + case 'end': + return _context.stop(); + } + } + }, _callee, _this3, [[4, 10]]); + })); + + return function (_x) { + return _ref.apply(this, arguments); + }; + }(); +}; + +exports.default = (0, _reactApollo.graphql)(_queries.CREATE_USER_MUTATION, { name: 'createUserMutation', options: { + // Easy, but slow + // refetchQueries: ['AllLinksQuery'] + // This is much Better / efficient + // Notice how the variable is called createItem - that is because createItem is the name of the query! + } })(Signup); + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/Signup.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/Signup.js"); } } })(); + +/***/ }), + +/***/ 644: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _auth0Lock = __webpack_require__(645); + +var _auth0Lock2 = _interopRequireDefault(_auth0Lock); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/LoginAuth0.js'; + + +var LoginAuth0 = function (_Component) { + (0, _inherits3.default)(LoginAuth0, _Component); + + function LoginAuth0(props) { + (0, _classCallCheck3.default)(this, LoginAuth0); + + var _this = (0, _possibleConstructorReturn3.default)(this, (LoginAuth0.__proto__ || (0, _getPrototypeOf2.default)(LoginAuth0)).call(this, props)); + + _this.createUser = function () { + var variables = { + idToken: window.localStorage.getItem("auth0IdToken"), + emailAddress: 'wesbos@gmail.com', + name: 'Hardcoded Wes' + }; + // TODO - make a createUser function + _this.props.createUser({ variables: variables }).then(function (response) { + _this.props.history.replace("/"); + }).catch(function (e) { + console.error(e); + _this.props.history.replace("/"); + }); + }; + + _this._showLogin = function () { + _this._lock.show(); + }; + + if (typeof window === 'undefined') return (0, _possibleConstructorReturn3.default)(_this); + var redirectUrl = 'http://localhost:3000/signup'; + console.log(redirectUrl); + _this._lock = new _auth0Lock2.default('l851ev2q8X48wf56eGLjIWFbMwwbvWPE', 'wesbos.auth0.com', { + auth: { + redirect: false + } + }); + return _this; + } + + (0, _createClass3.default)(LoginAuth0, [{ + key: 'componentDidMount', + value: function componentDidMount() { + console.log('MOUNT'); + this._lock.on('authenticated', function (authResult) { + console.log('HIIIIIIII'); + window.localStorage.setItem('auth0IdToken', authResult.idToken); + console.log('Done!', authResult); + }); + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 51 + } + }, _react2.default.createElement('button', { onClick: this._showLogin, __source: { + fileName: _jsxFileName, + lineNumber: 52 + } + }, 'Log in with Auth0 ')); + } + }]); + + return LoginAuth0; +}(_react.Component); + +exports.default = LoginAuth0; + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/LoginAuth0.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/LoginAuth0.js"); } } })(); + +/***/ }), + +/***/ 677: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _taggedTemplateLiteral2 = __webpack_require__(576); + +var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _Header = __webpack_require__(872); + +var _Header2 = _interopRequireDefault(_Header); + +var _Meta = __webpack_require__(873); + +var _Meta2 = _interopRequireDefault(_Meta); + +var _withData = __webpack_require__(586); + +var _withData2 = _interopRequireDefault(_withData); + +var _Nav = __webpack_require__(678); + +var _Nav2 = _interopRequireDefault(_Nav); + +var _styledComponents = __webpack_require__(641); + +var _styledComponents2 = _interopRequireDefault(_styledComponents); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/Page.js'; + +var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n font-family: sans-serif;\n color: #303030;\n background: #efc600;\n padding: 100px;\n'], ['\n font-family: sans-serif;\n color: #303030;\n background: #efc600;\n padding: 100px;\n']); + +var StyledPage = _styledComponents2.default.div(_templateObject); + +var Page = function Page(_ref) { + var children = _ref.children; + return _react2.default.createElement(StyledPage, { className: 'main', __source: { + fileName: _jsxFileName, + lineNumber: 15 + } + }, _react2.default.createElement(_Meta2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 16 + } + }), _react2.default.createElement(_Header2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 17 + } + }), _react2.default.createElement(_Nav2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 18 + } + }), _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 19 + } + }, children)); +}; + +exports.default = (0, _withData2.default)(Page); + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/Page.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/Page.js"); } } })(); + +/***/ }), + +/***/ 678: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _link = __webpack_require__(636); + +var _link2 = _interopRequireDefault(_link); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = "/Users/wesbos/Sites/advanced-react/examples/next/components/Nav.js"; + +exports.default = function () { + return _react2.default.createElement("ul", { + __source: { + fileName: _jsxFileName, + lineNumber: 4 + } + }, _react2.default.createElement(_link2.default, { href: "/", __source: { + fileName: _jsxFileName, + lineNumber: 5 + } + }, _react2.default.createElement("a", { + __source: { + fileName: _jsxFileName, + lineNumber: 5 + } + }, "Home")), _react2.default.createElement(_link2.default, { href: "/signup/", __source: { + fileName: _jsxFileName, + lineNumber: 6 + } + }, _react2.default.createElement("a", { + __source: { + fileName: _jsxFileName, + lineNumber: 6 + } + }, "Signup")), _react2.default.createElement(_link2.default, { href: "/orders/", __source: { + fileName: _jsxFileName, + lineNumber: 7 + } + }, _react2.default.createElement("a", { + __source: { + fileName: _jsxFileName, + lineNumber: 7 + } + }, "Orders"))); +}; + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/Nav.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/Nav.js"); } } })(); + +/***/ }), + +/***/ 679: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(680); + + +/***/ }), + +/***/ 680: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(__resourceQuery) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _withData = __webpack_require__(586); + +var _withData2 = _interopRequireDefault(_withData); + +var _Items = __webpack_require__(635); + +var _Items2 = _interopRequireDefault(_Items); + +var _CreateItem = __webpack_require__(642); + +var _CreateItem2 = _interopRequireDefault(_CreateItem); + +var _Signup = __webpack_require__(643); + +var _Signup2 = _interopRequireDefault(_Signup); + +var _LoginAuth = __webpack_require__(644); + +var _LoginAuth2 = _interopRequireDefault(_LoginAuth); + +var _Page = __webpack_require__(677); + +var _Page2 = _interopRequireDefault(_Page); + +var _OrderList = __webpack_require__(874); + +var _OrderList2 = _interopRequireDefault(_OrderList); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/pages/orders.js?entry'; + + +var Orders = function (_Component) { + (0, _inherits3.default)(Orders, _Component); + + function Orders() { + (0, _classCallCheck3.default)(this, Orders); + + return (0, _possibleConstructorReturn3.default)(this, (Orders.__proto__ || (0, _getPrototypeOf2.default)(Orders)).apply(this, arguments)); + } + + (0, _createClass3.default)(Orders, [{ + key: 'render', + value: function render() { + return _react2.default.createElement(_Page2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 13 + } + }, _react2.default.createElement('h2', { + __source: { + fileName: _jsxFileName, + lineNumber: 14 + } + }, 'My Orders'), _react2.default.createElement(_OrderList2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 15 + } + })); + } + }]); + + return Orders; +}(_react.Component); + +exports.default = Orders; + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/pages/orders.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/pages/orders.js"); } } })(); + (function (Component, route) { + if (false) return + if (false) return + + var qs = __webpack_require__(70) + var params = qs.parse(__resourceQuery.slice(1)) + if (params.entry == null) return + + module.hot.accept() + Component.__route = route + + if (module.hot.status() === 'idle') return + + var components = next.router.components + for (var r in components) { + if (!components.hasOwnProperty(r)) continue + + if (components[r].Component.__route === route) { + next.router.update(r, Component) + } + } + })(typeof __webpack_exports__ !== 'undefined' ? __webpack_exports__.default : (module.exports.default || module.exports), "/orders") + +/* WEBPACK VAR INJECTION */}.call(exports, "?entry")) + +/***/ }), + +/***/ 723: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process, global) { + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = initApollo; + +var _reactApollo = __webpack_require__(547); + +var _isomorphicFetch = __webpack_require__(724); + +var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var apolloClient = null; + +// Polyfill fetch() on the server (used by apollo-client) +if (!process.browser) { + global.fetch = _isomorphicFetch2.default; +} + +function create(initialState) { + + var networkInterface = (0, _reactApollo.createNetworkInterface)({ + uri: 'https://api.graph.cool/simple/v1/cj5xz8szs28930145gct82bdj', // Server URL (must be absolute) + opts: { // Additional fetch() options like `credentials` or `headers` + credentials: 'same-origin' + } + }); + + // use the auth0IdToken in localStorage for authorized requests + networkInterface.use([{ + applyMiddleware: function applyMiddleware(req, next) { + if (!req.options.headers) { + req.options.headers = {}; + } + + // get the authentication token from local storage if it exists + if (typeof localStorage !== 'undefined' && localStorage.getItem("auth0IdToken")) { + req.options.headers.authorization = 'Bearer ' + localStorage.getItem("auth0IdToken"); + } + next(); + } + }]); + + return new _reactApollo.ApolloClient({ + initialState: initialState, + ssrMode: !process.browser, // Disables forceFetch on the server (so queries are only run once) + networkInterface: networkInterface + }); +} + +function initApollo(initialState) { + // Make sure to create a new client for every server-side request so that data + // isn't shared between connections (which would be bad) + if (!process.browser) { + return create(initialState); + } + + // Reuse client on the client-side + if (!apolloClient) { + apolloClient = create(initialState); + } + + return apolloClient; +} + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/lib/initApollo.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/lib/initApollo.js"); } } })(); +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(54), __webpack_require__(53))) + +/***/ }), + +/***/ 731: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _regenerator = __webpack_require__(75); + +var _regenerator2 = _interopRequireDefault(_regenerator); + +var _asyncToGenerator2 = __webpack_require__(76); + +var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); + +var _defineProperty2 = __webpack_require__(732); + +var _defineProperty3 = _interopRequireDefault(_defineProperty2); + +var _extends2 = __webpack_require__(112); + +var _extends3 = _interopRequireDefault(_extends2); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _reactApollo = __webpack_require__(547); + +var _queries = __webpack_require__(557); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/UpdateItem.js'; + + +var UpdateLink = function (_Component) { + (0, _inherits3.default)(UpdateLink, _Component); + + function UpdateLink() { + var _ref, + _this2 = this; + + var _temp, _this, _ret; + + (0, _classCallCheck3.default)(this, UpdateLink); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = UpdateLink.__proto__ || (0, _getPrototypeOf2.default)(UpdateLink)).call.apply(_ref, [this].concat(args))), _this), _this.state = (0, _extends3.default)({}, _this.props.findItem.Item), _this.saveToState = function (e) { + var _e$target = e.target, + name = _e$target.name, + value = _e$target.value, + type = _e$target.type; + + if (type === 'number') { + value = parseInt(value); + } + + _this.setState((0, _defineProperty3.default)({}, name, value)); + }, _this._createLink = function () { + var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(e) { + var _this$state, description, title, id, res; + + return _regenerator2.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + e.preventDefault(); + // pull the values from state + _this$state = _this.state, description = _this$state.description, title = _this$state.title; + id = _this.props.id; + // create a mutation + // TODO: handle any errors + // turn loading on + + _this.setState({ loading: true }); + console.log(_this.state); + _context.next = 7; + return _this.props.updateItem({ + // pass in those variables from state + variables: (0, _extends3.default)({}, _this.state) + }); + + case 7: + res = _context.sent; + + _this.setState({ loading: false }); + + case 9: + case 'end': + return _context.stop(); + } + } + }, _callee, _this2); + })); + + return function (_x) { + return _ref2.apply(this, arguments); + }; + }(), _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); + } + + (0, _createClass3.default)(UpdateLink, [{ + key: 'render', + value: function render() { + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 22 + } + }, _react2.default.createElement('h2', { + __source: { + fileName: _jsxFileName, + lineNumber: 24 + } + }, 'Edit ', this.props.id), this.state.loading ? 'LOADING...' : 'Ready!', _react2.default.createElement('form', { onSubmit: this._createLink, __source: { + fileName: _jsxFileName, + lineNumber: 26 + } + }, _react2.default.createElement('label', { htmlFor: 'title', __source: { + fileName: _jsxFileName, + lineNumber: 28 + } + }, 'Title'), _react2.default.createElement('input', { value: this.state.title, name: 'title', onChange: this.saveToState, type: 'text', __source: { + fileName: _jsxFileName, + lineNumber: 29 + } + }), _react2.default.createElement('label', { htmlFor: 'description', __source: { + fileName: _jsxFileName, + lineNumber: 31 + } + }, 'Description'), _react2.default.createElement('textarea', { value: this.state.description, name: 'description', onChange: this.saveToState, __source: { + fileName: _jsxFileName, + lineNumber: 32 + } + }), _react2.default.createElement('label', { htmlFor: 'price', __source: { + fileName: _jsxFileName, + lineNumber: 34 + } + }, 'Price'), _react2.default.createElement('input', { type: 'number', name: 'price', onChange: this.saveToState, value: this.state.price, __source: { + fileName: _jsxFileName, + lineNumber: 35 + } + }), _react2.default.createElement('label', { htmlFor: 'fullPrice', __source: { + fileName: _jsxFileName, + lineNumber: 37 + } + }, 'Full Price'), _react2.default.createElement('input', { type: 'number', name: 'fullPrice', onChange: this.saveToState, value: this.state.fullPrice, __source: { + fileName: _jsxFileName, + lineNumber: 38 + } + }), _react2.default.createElement('button', { type: 'submit', __source: { + fileName: _jsxFileName, + lineNumber: 40 + } + }, 'Save...'))); + } + }]); + + return UpdateLink; +}(_react.Component); + +var ComponentWithMutations = (0, _reactApollo.compose)( +// First, query for getting the link +(0, _reactApollo.graphql)(_queries.SINGLE_LINK_QUERY, { + name: 'findItem', + options: function options(_ref3) { + var id = _ref3.id; + return { + variables: { id: id } + }; + } +}), +// Second, the mutation for updating the link +(0, _reactApollo.graphql)(_queries.UPDATE_LINK_MUTATION, { name: 'updateItem' }))(UpdateLink); + +exports.default = ComponentWithMutations; + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/UpdateItem.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/UpdateItem.js"); } } })(); + +/***/ }), + +/***/ 733: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.itemDetails = undefined; + +var _taggedTemplateLiteral2 = __webpack_require__(576); + +var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); + +var _reactApollo = __webpack_require__(547); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n fragment itemDetails on Item {\n id\n title\n price\n fullPrice\n description\n image {\n id\n url\n secret\n }\n }\n'], ['\n fragment itemDetails on Item {\n id\n title\n price\n fullPrice\n description\n image {\n id\n url\n secret\n }\n }\n']); + +var itemDetails = exports.itemDetails = (0, _reactApollo.gql)(_templateObject); + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/queries/fragments.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/queries/fragments.js"); } } })(); + +/***/ }), + +/***/ 750: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _regenerator = __webpack_require__(75); + +var _regenerator2 = _interopRequireDefault(_regenerator); + +var _asyncToGenerator2 = __webpack_require__(76); + +var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _reactStripeCheckout = __webpack_require__(751); + +var _reactStripeCheckout2 = _interopRequireDefault(_reactStripeCheckout); + +var _queries = __webpack_require__(557); + +var _reactApollo = __webpack_require__(547); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/TakeMyMoney.js'; + + +var TakeMyMoney = function (_Component) { + (0, _inherits3.default)(TakeMyMoney, _Component); + + function TakeMyMoney() { + var _ref, + _this2 = this; + + var _temp, _this, _ret; + + (0, _classCallCheck3.default)(this, TakeMyMoney); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = TakeMyMoney.__proto__ || (0, _getPrototypeOf2.default)(TakeMyMoney)).call.apply(_ref, [this].concat(args))), _this), _this.onToken = function () { + var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(res) { + var token, userId, itemId, charge; + return _regenerator2.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + token = res.id; + userId = _this.props.currentUserQuery.user.id; + itemId = _this.props.id; + + console.log('Going to make a purchase with ' + token); + console.log('THe person that bought this was ' + userId); + console.log('The item id is ' + itemId); + _context.next = 8; + return _this.props.createOrder({ variables: { token: token, userId: userId, itemId: itemId } }); + + case 8: + charge = _context.sent; + + alert('Back from the charge! ' + charge.id); + console.log(charge); + + case 11: + case 'end': + return _context.stop(); + } + } + }, _callee, _this2); + })); + + return function (_x) { + return _ref2.apply(this, arguments); + }; + }(), _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); + } + + (0, _createClass3.default)(TakeMyMoney, [{ + key: 'render', + value: function render() { + var user = this.props.currentUserQuery.user || {}; + var email = user.email || ''; + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 24 + } + }, _react2.default.createElement(_reactStripeCheckout2.default, { + amount: this.props.amount, + name: this.props.name, + description: this.props.description, + token: this.onToken, + stripeKey: 'pk_lclTtThFp8CnO3QtEZSd8HA9mFUps', + currency: 'USD', + email: email, + __source: { + fileName: _jsxFileName, + lineNumber: 25 + } + }, this.props.children)); + } + }]); + + return TakeMyMoney; +}(_react.Component); + +var userEnhancer = (0, _reactApollo.graphql)(_queries.CURRENT_USER_QUERY, { name: 'currentUserQuery' }); +var createOrderEnhancer = (0, _reactApollo.graphql)(_queries.CREATE_ORDER_MUTATION, { name: 'createOrder' }); +exports.default = (0, _reactApollo.compose)(userEnhancer, createOrderEnhancer)(TakeMyMoney); + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/TakeMyMoney.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/TakeMyMoney.js"); } } })(); + +/***/ }), + +/***/ 752: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (amount) { + return '$' + (amount / 100).toLocaleString(); +}; + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/lib/formatMoney.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/lib/formatMoney.js"); } } })(); + +/***/ }), + +/***/ 753: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (image) { + var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 300; + var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300; + + if (!image || !image.secret) return ''; + return 'https://images.graph.cool/v1/cj5xz8szs28930145gct82bdj/' + image.secret + '/' + width + 'x' + height; +}; + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/lib/image.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/lib/image.js"); } } })(); + +/***/ }), + +/***/ 872: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _reactApollo = __webpack_require__(547); + +var _queries = __webpack_require__(557); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/Header.js'; + + +var Header = function (_Component) { + (0, _inherits3.default)(Header, _Component); + + function Header() { + (0, _classCallCheck3.default)(this, Header); + + return (0, _possibleConstructorReturn3.default)(this, (Header.__proto__ || (0, _getPrototypeOf2.default)(Header)).apply(this, arguments)); + } + + (0, _createClass3.default)(Header, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // This fetches the new data, but doesn't populate the user via props + // this.props.currentUserQuery.refetch(); + // This fetches the new data, and populates the user via props + setTimeout(this.props.currentUserQuery.refetch, 1); + } + }, { + key: 'render', + value: function render() { + console.log(this.props.currentUserQuery.user); + var user = this.props.currentUserQuery.user || {}; + var _user$email = user.email, + email = _user$email === undefined ? '' : _user$email; + + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 20 + } + }, _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 21 + } + }, email, ' I\'m the header!')); + } + }]); + + return Header; +}(_react.Component); + +var userEnhancer = (0, _reactApollo.graphql)(_queries.CURRENT_USER_QUERY, { name: 'currentUserQuery' }); +exports.default = (0, _reactApollo.compose)(userEnhancer)(Header); + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/Header.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/Header.js"); } } })(); + +/***/ }), + +/***/ 873: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _head = __webpack_require__(226); + +var _head2 = _interopRequireDefault(_head); + +var _index = __webpack_require__(71); + +var _index2 = _interopRequireDefault(_index); + +var _Nav = __webpack_require__(678); + +var _Nav2 = _interopRequireDefault(_Nav); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/Meta.js'; + +exports.default = function () { + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 6 + } + }, _react2.default.createElement(_head2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 7 + } + }, _react2.default.createElement('meta', { name: 'viewport', content: 'width=device-width, initial-scale=1', __source: { + fileName: _jsxFileName, + lineNumber: 8 + } + }), _react2.default.createElement('meta', { charSet: 'utf-8', __source: { + fileName: _jsxFileName, + lineNumber: 9 + } + }), _react2.default.createElement(_Nav2.default, { + __source: { + fileName: _jsxFileName, + lineNumber: 10 + } + }), _react2.default.createElement('link', { rel: 'shortcut icon', href: 'https://wesbos.com/wp-content/themes/wb2014/i/crown-yellow-small.png', __source: { + fileName: _jsxFileName, + lineNumber: 11 + } + }), _react2.default.createElement('link', { rel: 'stylesheet', href: 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css', __source: { + fileName: _jsxFileName, + lineNumber: 12 + } + }), _react2.default.createElement('title', { + __source: { + fileName: _jsxFileName, + lineNumber: 13 + } + }, 'Sick Fits'))); +}; + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/Meta.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/Meta.js"); } } })(); + +/***/ }), + +/***/ 874: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getPrototypeOf = __webpack_require__(46); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(14); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(15); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(47); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(48); + +var _inherits3 = _interopRequireDefault(_inherits2); + +var _react = __webpack_require__(11); + +var _react2 = _interopRequireDefault(_react); + +var _withData = __webpack_require__(586); + +var _withData2 = _interopRequireDefault(_withData); + +var _Items = __webpack_require__(635); + +var _Items2 = _interopRequireDefault(_Items); + +var _CreateItem = __webpack_require__(642); + +var _CreateItem2 = _interopRequireDefault(_CreateItem); + +var _Signup = __webpack_require__(643); + +var _Signup2 = _interopRequireDefault(_Signup); + +var _LoginAuth = __webpack_require__(644); + +var _LoginAuth2 = _interopRequireDefault(_LoginAuth); + +var _Page = __webpack_require__(677); + +var _Page2 = _interopRequireDefault(_Page); + +var _queries = __webpack_require__(557); + +var _reactApollo = __webpack_require__(547); + +var _lodash = __webpack_require__(875); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _lodash3 = __webpack_require__(876); + +var _lodash4 = _interopRequireDefault(_lodash3); + +var _formatMoney = __webpack_require__(752); + +var _formatMoney2 = _interopRequireDefault(_formatMoney); + +var _image = __webpack_require__(753); + +var _image2 = _interopRequireDefault(_image); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _jsxFileName = '/Users/wesbos/Sites/advanced-react/examples/next/components/OrderList.js'; + + +var OrderList = function (_Component) { + (0, _inherits3.default)(OrderList, _Component); + + function OrderList() { + (0, _classCallCheck3.default)(this, OrderList); + + return (0, _possibleConstructorReturn3.default)(this, (OrderList.__proto__ || (0, _getPrototypeOf2.default)(OrderList)).apply(this, arguments)); + } + + (0, _createClass3.default)(OrderList, [{ + key: 'componentDidMount', + value: function componentDidMount() { + console.log('Mounting!'); + } + }, { + key: 'render', + value: function render() { + + if (this.props.loading) { + return _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 22 + } + }, 'Loading...'); + } + + if (this.props.error) { + return _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 26 + } + }, 'Error...'); + } + + if (!(0, _lodash2.default)(this.props, 'userOrdersQuery.user.orders')) { + return _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 30 + } + }, 'Don\'t have it yet!'); + } + + var orders = this.props.userOrdersQuery.user.orders; + + console.log(orders); + return _react2.default.createElement('div', { + __source: { + fileName: _jsxFileName, + lineNumber: 37 + } + }, _react2.default.createElement('h2', { + __source: { + fileName: _jsxFileName, + lineNumber: 38 + } + }, 'You have ', orders.length, ' Orders'), _react2.default.createElement('ul', { + __source: { + fileName: _jsxFileName, + lineNumber: 39 + } + }, orders.map(function (order) { + return _react2.default.createElement('li', { key: order.id, __source: { + fileName: _jsxFileName, + lineNumber: 40 + } + }, _react2.default.createElement('img', { src: (0, _image2.default)(order.item.image), alt: '', __source: { + fileName: _jsxFileName, + lineNumber: 41 + } + }), _react2.default.createElement('h3', { + __source: { + fileName: _jsxFileName, + lineNumber: 42 + } + }, order.item.title, ' (', (0, _formatMoney2.default)(order.amount), ') '), _react2.default.createElement('p', { + __source: { + fileName: _jsxFileName, + lineNumber: 43 + } + }, order.item.description)); + }))); + } + }]); + + return OrderList; +}(_react.Component); + +var ordersEnhancer = (0, _reactApollo.graphql)(_queries.USER_ORDERS_QUERY, { name: 'userOrdersQuery' }); +exports.default = (0, _reactApollo.compose)(ordersEnhancer)(OrderList); + + ;(function register() { /* react-hot-loader/webpack */ if (true) { if (typeof __REACT_HOT_LOADER__ === 'undefined') { return; } if (typeof module.exports === 'function') { __REACT_HOT_LOADER__.register(module.exports, 'module.exports', "/Users/wesbos/Sites/advanced-react/examples/next/components/OrderList.js"); return; } for (var key in module.exports) { if (!Object.prototype.hasOwnProperty.call(module.exports, key)) { continue; } var namedExport = void 0; try { namedExport = module.exports[key]; } catch (err) { continue; } __REACT_HOT_LOADER__.register(namedExport, key, "/Users/wesbos/Sites/advanced-react/examples/next/components/OrderList.js"); } } })(); + +/***/ }) + +},[679]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlcy9wYWdlcy9vcmRlcnMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9xdWVyaWVzL2luZGV4LmpzPzczNzBmZmMiLCJ3ZWJwYWNrOi8vLy4vbGliL3dpdGhEYXRhLmpzP2IzYmYzMmMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9JdGVtcy5qcz9iM2JmMzJjIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvQ3JlYXRlSXRlbS5qcz9iM2JmMzJjIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvU2lnbnVwLmpzP2IzYmYzMmMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9Mb2dpbkF1dGgwLmpzP2IzYmYzMmMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9QYWdlLmpzP2IzYmYzMmMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9OYXYuanM/YjNiZjMyYyIsIndlYnBhY2s6Ly8vLi9wYWdlcy9vcmRlcnMuanM/YjNiZjMyYyIsIndlYnBhY2s6Ly8vLi9saWIvaW5pdEFwb2xsby5qcz9iM2JmMzJjIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvVXBkYXRlSXRlbS5qcz9iM2JmMzJjIiwid2VicGFjazovLy8uL3F1ZXJpZXMvZnJhZ21lbnRzLmpzP2IzYmYzMmMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9UYWtlTXlNb25leS5qcz9iM2JmMzJjIiwid2VicGFjazovLy8uL2xpYi9mb3JtYXRNb25leS5qcz9iM2JmMzJjIiwid2VicGFjazovLy8uL2xpYi9pbWFnZS5qcz9iM2JmMzJjIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvSGVhZGVyLmpzP2IzYmYzMmMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9NZXRhLmpzP2IzYmYzMmMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9PcmRlckxpc3QuanM/YjNiZjMyYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBncWwgfSBmcm9tICdyZWFjdC1hcG9sbG8nXG5pbXBvcnQgeyBpdGVtRGV0YWlscyB9IGZyb20gJy4vZnJhZ21lbnRzJztcblxuZXhwb3J0IGNvbnN0IENSRUFURV9MSU5LX01VVEFUSU9OID0gZ3FsYFxuICAke2l0ZW1EZXRhaWxzfVxuICBtdXRhdGlvbiBDcmVhdGVMaW5rTXV0YXRpb24oJGRlc2NyaXB0aW9uOiBTdHJpbmchLCAkdGl0bGU6IFN0cmluZyEsICRpbWFnZUlkOiBJRCwgJHByaWNlOiBJbnQhKSB7XG4gICAgY3JlYXRlSXRlbShcbiAgICAgIGRlc2NyaXB0aW9uOiAkZGVzY3JpcHRpb24sXG4gICAgICB0aXRsZTogJHRpdGxlLFxuICAgICAgaW1hZ2VJZDogJGltYWdlSWRcbiAgICAgIHByaWNlOiAkcHJpY2VcbiAgICApIHtcbiAgICAgIC4uLml0ZW1EZXRhaWxzXG4gICAgfVxuICB9XG5gXG5cbmV4cG9ydCBjb25zdCBDUkVBVEVfVVNFUl9NVVRBVElPTiA9IGdxbGBcbiAgbXV0YXRpb24gQ3JlYXRlVXNlck11dGF0aW9uKCRlbWFpbDogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRpZFRva2VuOiBTdHJpbmchKSB7XG4gICAgY3JlYXRlVXNlcihcbiAgICAgIGVtYWlsOiAkZW1haWwsXG4gICAgICBuYW1lOiAkbmFtZSxcbiAgICAgIGF1dGhQcm92aWRlcjogeyBhdXRoMDogeyBpZFRva2VuOiAkaWRUb2tlbiB9IH1cbiAgICApIHtcbiAgICAgIGlkLFxuICAgICAgZW1haWwsXG4gICAgICBuYW1lXG4gICAgfVxuICB9XG5gXG5cbmV4cG9ydCBjb25zdCBDUkVBVEVfT1JERVJfTVVUQVRJT04gPSBncWxgXG4gIG11dGF0aW9uIENyZWF0ZU9yZGVyTXV0YXRpb24oJHRva2VuOiBTdHJpbmchLCAkdXNlcklkOiBJRCEsICRpdGVtSWQ6IElEISkge1xuICAgIGNyZWF0ZU9yZGVyKHRva2VuOiAkdG9rZW4sIHVzZXJJZDogJHVzZXJJZCwgaXRlbUlkOiAkaXRlbUlkKSB7XG4gICAgICBpZFxuICAgICAgdG9rZW5cbiAgICAgIGNoYXJnZVxuICAgICAgYW1vdW50XG4gICAgICBpdGVtIHtcbiAgICAgICAgaWRcbiAgICAgICAgdGl0bGVcbiAgICAgICAgZGVzY3JpcHRpb25cbiAgICAgIH1cbiAgICAgIHVzZXIge1xuICAgICAgICBpZFxuICAgICAgICBlbWFpbFxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuXG5leHBvcnQgY29uc3QgQUxMX0lURU1TX1FVRVJZID0gZ3FsYFxuICAjIEltcG9ydCB0aGUgRnJhZ21lbnRcbiAgJHtpdGVtRGV0YWlsc31cbiAgcXVlcnkgQWxsTGlua3NRdWVyeSB7XG4gICAgYWxsSXRlbXMob3JkZXJCeTogY3JlYXRlZEF0X0RFU0MpIHtcbiAgICAgICMgVXNlIHRoYXQgZnJhZ21lbnQgYnkgaXQncyBuYW1lIChldmVuIHRob3VnaCBpdCB0aGUgc2FtZSBhcyB0aGUgdmFyaWFibGUpXG4gICAgICAuLi5pdGVtRGV0YWlsc1xuICAgIH1cbiAgfVxuYFxuXG5leHBvcnQgY29uc3QgU0lOR0xFX0xJTktfUVVFUlkgPSBncWxgXG4gICR7aXRlbURldGFpbHN9XG4gIHF1ZXJ5IEZpbmRJdGVtKCRpZDogSUQhKSB7XG4gICAgSXRlbShpZDogJGlkKSB7XG4gICAgICAuLi5pdGVtRGV0YWlsc1xuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IERFTEVURV9JVEVNX01VVEFUSU9OID0gZ3FsYFxuICBtdXRhdGlvbiBEZWx0ZUl0ZW0oJGlkOiBJRCEpIHtcbiAgICBkZWxldGVJdGVtKGlkOiAkaWQpIHtcbiAgICAgIGlkLFxuICAgICAgdGl0bGUsXG4gICAgICBkZXNjcmlwdGlvblxuICAgIH1cbiAgfVxuYFxuXG5leHBvcnQgY29uc3QgVVBEQVRFX0xJTktfTVVUQVRJT04gPSBncWxgXG4gICR7aXRlbURldGFpbHN9XG4gIG11dGF0aW9uIFVwZGF0ZUl0ZW0oJGlkOiBJRCEsICR0aXRsZTogU3RyaW5nISwgJGRlc2NyaXB0aW9uOiBTdHJpbmchLCAkcHJpY2U6IEludCEsICRmdWxsUHJpY2U6IEludCEpIHtcbiAgICB1cGRhdGVJdGVtKFxuICAgICAgaWQ6ICRpZCxcbiAgICAgIGRlc2NyaXB0aW9uOiAkZGVzY3JpcHRpb24sXG4gICAgICB0aXRsZTogJHRpdGxlLFxuICAgICAgcHJpY2U6ICRwcmljZSxcbiAgICAgIGZ1bGxQcmljZTogJGZ1bGxQcmljZVxuICAgICkge1xuICAgICAgLi4uaXRlbURldGFpbHNcbiAgICB9XG4gIH1cbmBcblxuZXhwb3J0IGNvbnN0IENVUlJFTlRfVVNFUl9RVUVSWSA9IGdxbGBcbiAgcXVlcnkgdXNlclF1ZXJ5IHtcbiAgICB1c2VyIHtcbiAgICAgIGlkXG4gICAgICBuYW1lXG4gICAgICBlbWFpbFxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IFVTRVJfT1JERVJTX1FVRVJZID0gZ3FsYFxuICBxdWVyeSB7XG4gICAgdXNlciB7ICMgZ3JhYiB0aGUgY3VycmVudCB1c2VyXG4gICAgICBpZFxuICAgICAgb3JkZXJzIHsgIyBhbmQgYSBhbGwgdGhlaXIgb3JkZXJzXG4gICAgICAgIGlkXG4gICAgICAgIGFtb3VudFxuICAgICAgICBjaGFyZ2VcbiAgICAgICAgaXRlbSB7ICMgcG9wdWxhdGUgdGhlIGRldGFpbHMgYWJvdXQgdGhlIGl0ZW0gdGhleSBib3VnaHQgd2l0aCB0aGUgaW1hZ2UsIGRlc2NyaXB0aW9uIGFuZCB0aXRsZVxuICAgICAgICAgIGltYWdlIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgc2VjcmV0XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlc2NyaXB0aW9uXG4gICAgICAgICAgdGl0bGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3F1ZXJpZXMvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBBcG9sbG9Qcm92aWRlciwgZ2V0RGF0YUZyb21UcmVlIH0gZnJvbSAncmVhY3QtYXBvbGxvJ1xuaW1wb3J0IEhlYWQgZnJvbSAnbmV4dC9oZWFkJ1xuaW1wb3J0IGluaXRBcG9sbG8gZnJvbSAnLi9pbml0QXBvbGxvJ1xuXG4vLyBHZXRzIHRoZSBkaXNwbGF5IG5hbWUgb2YgYSBKU1ggY29tcG9uZW50IGZvciBkZXYgdG9vbHNcbmZ1bmN0aW9uIGdldENvbXBvbmVudERpc3BsYXlOYW1lIChDb21wb25lbnQpIHtcbiAgcmV0dXJuIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnVW5rbm93bidcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zZWRDb21wb25lbnQgPT4ge1xuICByZXR1cm4gY2xhc3MgV2l0aERhdGEgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHN0YXRpYyBkaXNwbGF5TmFtZSA9IGBXaXRoRGF0YSgke2dldENvbXBvbmVudERpc3BsYXlOYW1lKENvbXBvc2VkQ29tcG9uZW50KX0pYFxuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBzZXJ2ZXJTdGF0ZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGdldEluaXRpYWxQcm9wcyAoY3R4KSB7XG4gICAgICBsZXQgc2VydmVyU3RhdGUgPSB7fVxuXG4gICAgICAvLyBFdmFsdWF0ZSB0aGUgY29tcG9zZWQgY29tcG9uZW50J3MgZ2V0SW5pdGlhbFByb3BzKClcbiAgICAgIGxldCBjb21wb3NlZEluaXRpYWxQcm9wcyA9IHt9XG4gICAgICBpZiAoQ29tcG9zZWRDb21wb25lbnQuZ2V0SW5pdGlhbFByb3BzKSB7XG4gICAgICAgIGNvbXBvc2VkSW5pdGlhbFByb3BzID0gYXdhaXQgQ29tcG9zZWRDb21wb25lbnQuZ2V0SW5pdGlhbFByb3BzKGN0eClcbiAgICAgIH1cblxuICAgICAgLy8gUnVuIGFsbCBHcmFwaFFMIHF1ZXJpZXMgaW4gdGhlIGNvbXBvbmVudCB0cmVlXG4gICAgICAvLyBhbmQgZXh0cmFjdCB0aGUgcmVzdWx0aW5nIGRhdGFcbiAgICAgIGlmICghcHJvY2Vzcy5icm93c2VyKSB7XG4gICAgICAgIGNvbnN0IGFwb2xsbyA9IGluaXRBcG9sbG8oKVxuICAgICAgICAvLyBQcm92aWRlIHRoZSBgdXJsYCBwcm9wIGRhdGEgaW4gY2FzZSBhIEdyYXBoUUwgcXVlcnkgdXNlcyBpdFxuICAgICAgICBjb25zdCB1cmwgPSB7cXVlcnk6IGN0eC5xdWVyeSwgcGF0aG5hbWU6IGN0eC5wYXRobmFtZX1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBSdW4gYWxsIEdyYXBoUUwgcXVlcmllc1xuICAgICAgICAgIGF3YWl0IGdldERhdGFGcm9tVHJlZShcbiAgICAgICAgICAgIDxBcG9sbG9Qcm92aWRlciBjbGllbnQ9e2Fwb2xsb30+XG4gICAgICAgICAgICAgIDxDb21wb3NlZENvbXBvbmVudCB1cmw9e3VybH0gey4uLmNvbXBvc2VkSW5pdGlhbFByb3BzfSAvPlxuICAgICAgICAgICAgPC9BcG9sbG9Qcm92aWRlcj5cbiAgICAgICAgICApXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gUHJldmVudCBBcG9sbG8gQ2xpZW50IEdyYXBoUUwgZXJyb3JzIGZyb20gY3Jhc2hpbmcgU1NSLlxuICAgICAgICAgIC8vIEhhbmRsZSB0aGVtIGluIGNvbXBvbmVudHMgdmlhIHRoZSBkYXRhLmVycm9yIHByb3A6XG4gICAgICAgICAgLy8gaHR0cDovL2Rldi5hcG9sbG9kYXRhLmNvbS9yZWFjdC9hcGktcXVlcmllcy5odG1sI2dyYXBocWwtcXVlcnktZGF0YS1lcnJvclxuICAgICAgICB9XG4gICAgICAgIC8vIGdldERhdGFGcm9tVHJlZSBkb2VzIG5vdCBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50XG4gICAgICAgIC8vIGhlYWQgc2lkZSBlZmZlY3QgdGhlcmVmb3JlIG5lZWQgdG8gYmUgY2xlYXJlZCBtYW51YWxseVxuICAgICAgICBIZWFkLnJld2luZCgpXG5cbiAgICAgICAgLy8gRXh0cmFjdCBxdWVyeSBkYXRhIGZyb20gdGhlIEFwb2xsbyBzdG9yZVxuICAgICAgICBjb25zdCBzdGF0ZSA9IGFwb2xsby5nZXRJbml0aWFsU3RhdGUoKVxuXG4gICAgICAgIHNlcnZlclN0YXRlID0ge1xuICAgICAgICAgIGFwb2xsbzoge1xuICAgICAgICAgICAgLy8gT25seSBpbmNsdWRlIHRoZSBBcG9sbG8gZGF0YSBzdGF0ZVxuICAgICAgICAgICAgZGF0YTogc3RhdGUuZGF0YVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXJ2ZXJTdGF0ZSxcbiAgICAgICAgLi4uY29tcG9zZWRJbml0aWFsUHJvcHNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgdGhpcy5hcG9sbG8gPSBpbml0QXBvbGxvKHRoaXMucHJvcHMuc2VydmVyU3RhdGUpXG4gICAgfVxuXG4gICAgcmVuZGVyICgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxBcG9sbG9Qcm92aWRlciBjbGllbnQ9e3RoaXMuYXBvbGxvfT5cbiAgICAgICAgICA8Q29tcG9zZWRDb21wb25lbnQgey4uLnRoaXMucHJvcHN9IC8+XG4gICAgICAgIDwvQXBvbGxvUHJvdmlkZXI+XG4gICAgICApXG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9saWIvd2l0aERhdGEuanMiLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdyYXBocWwsIGNvbXBvc2UgfSBmcm9tICdyZWFjdC1hcG9sbG8nXG5pbXBvcnQgVXBkYXRlSXRlbSBmcm9tICcuL1VwZGF0ZUl0ZW0nO1xuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFRha2VNeU1vbmV5IGZyb20gJy4vVGFrZU15TW9uZXknO1xuaW1wb3J0IGZvcm1hdE1vbmV5IGZyb20gJy4uL2xpYi9mb3JtYXRNb25leSc7XG5pbXBvcnQgbWFrZUltYWdlIGZyb20gJy4uL2xpYi9pbWFnZSc7XG5cbmltcG9ydCB7IEFMTF9JVEVNU19RVUVSWSwgREVMRVRFX0lURU1fTVVUQVRJT04gfSBmcm9tICcuLi9xdWVyaWVzJztcblxuY29uc3QgVGl0bGUgPSBzdHlsZWQuaDFgXG4gIGZvbnQtc2l6ZTogNTBweDtcbmA7XG5cblxuXG5jb25zdCBJdGVtcyA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIGNhbGMoMjUlIC0gMjBweCkpO1xuICBncmlkLWdhcDogMjBweDtcbmA7XG5cbmNvbnN0IEl0ZW0gPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kOiAjZjNmM2YzO1xuICBwYWRkaW5nOiAyMHB4O1xuICBpbWcge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5gO1xuXG5jbGFzcyBJdGVtTGlzdCBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgcmVuZGVyKCkge1xuXG4gICAgLy8gMVxuICAgIGlmICh0aGlzLnByb3BzLmFsbExpbmtzUXVlcnkgJiYgdGhpcy5wcm9wcy5hbGxMaW5rc1F1ZXJ5LmxvYWRpbmcpIHtcbiAgICAgIHJldHVybiA8ZGl2PkxvYWRpbmc8L2Rpdj5cbiAgICB9XG5cbiAgICAvLyAyXG4gICAgaWYgKHRoaXMucHJvcHMuYWxsTGlua3NRdWVyeSAmJiB0aGlzLnByb3BzLmFsbExpbmtzUXVlcnkuZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMucHJvcHMuYWxsTGlua3NRdWVyeS5lcnJvcilcbiAgICAgIHJldHVybiA8ZGl2PkVycm9yPC9kaXY+XG4gICAgfVxuXG4gICAgLy8gM1xuICAgIGNvbnN0IGl0ZW1zVG9SZW5kZXIgPSB0aGlzLnByb3BzLmFsbExpbmtzUXVlcnkuYWxsSXRlbXNcblxuICAgIHJldHVybiAoXG4gICAgICA8SXRlbXM+XG4gICAgICAgIDxUaXRsZT5JdGVtcyBGb3IgU2FsZTwvVGl0bGU+XG4gICAgICAgIHtpdGVtc1RvUmVuZGVyLm1hcCgoaXRlbSxpKSA9PiAoXG4gICAgICAgICAgPEl0ZW0gY2xhc3NOYW1lPVwiaXRlbVwiIGtleT17aX0+XG4gICAgICAgICAgICB7IGl0ZW0uaW1hZ2UgPyAgPGltZyBzcmM9e21ha2VJbWFnZShpdGVtLmltYWdlKX0gLz4gOiBudWxsIH1cbiAgICAgICAgICAgIDxoMz57aXRlbS50aXRsZX08L2gzPlxuICAgICAgICAgICAgPHA+e2l0ZW0uZGVzY3JpcHRpb259PC9wPlxuICAgICAgICAgICAgPExpbmsgaHJlZj17e1xuICAgICAgICAgICAgICBwYXRobmFtZTogJy9hZG1pbi91cGRhdGUnLFxuICAgICAgICAgICAgICBxdWVyeTogeyBpZDogaXRlbS5pZCB9XG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgPGE+RWRpdCB7aXRlbS5pZH08L2E+XG4gICAgICAgICAgICA8L0xpbms+XG5cbiAgICAgICAgICAgIDxUYWtlTXlNb25leVxuICAgICAgICAgICAgICBpZD17aXRlbS5pZH1cbiAgICAgICAgICAgICAgYW1vdW50PXtpdGVtLnByaWNlfVxuICAgICAgICAgICAgICBuYW1lPXtpdGVtLnRpdGxlfSAvLyB0aGUgcG9wLWluIGhlYWRlciB0aXRsZVxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17aXRlbS5kZXNjcmlwdGlvbn0gLy8gdGhlIHBvcC1pbiBoZWFkZXIgc3VidGl0bGVcbiAgICAgICAgICAgICAgaW1hZ2U9e21ha2VJbWFnZShpdGVtLmltYWdlKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvbj5CdXkgZm9yIHtmb3JtYXRNb25leShpdGVtLnByaWNlKX08L2J1dHRvbj5cbiAgICAgICAgICAgIDwvVGFrZU15TW9uZXk+XG4gICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHRoaXMucHJvcHMucmVtb3ZlSXRlbU11dGF0aW9uKHsgdmFyaWFibGVzOiB7IGlkOiBpdGVtLmlkIH19KX0+JnRpbWVzOyBEZWxldGUgaXRlbTwvYnV0dG9uPlxuXG4gICAgICAgICAgPC9JdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvSXRlbXM+XG4gICAgKVxuICB9XG5cbn1cblxuLy8gMVxuXG4vLyBXZSBleHBvcnQgdGhlIGdyYXBoUUwgSE9DIC0gdGhpcyB3aWxsIGZldGNoIHRoZSBkYXRhIGFuZCBpbmplY3QgaXQgaW50byB0aGUgSXRlbUxpc3QgY29tcGVvbnQgdmlhIHByb3BzXG5cbi8vIENyZWF0ZSBzb21lIEVuaGFuY2Vyc1xuY29uc3QgaXRlbXNFbmFobmNlciA9IGdyYXBocWwoQUxMX0lURU1TX1FVRVJZLCB7IG5hbWU6ICdhbGxMaW5rc1F1ZXJ5JyB9KTtcbmNvbnN0IGRlbGV0ZUl0ZW1FbmhhbmNlciA9IGdyYXBocWwoREVMRVRFX0lURU1fTVVUQVRJT04sIHtcbiAgbmFtZTogJ3JlbW92ZUl0ZW1NdXRhdGlvbicsXG4gIG9wdGlvbnM6IHtcbiAgICB1cGRhdGU6IChwcm94eSwgeyBkYXRhOiB7IGRlbGV0ZUl0ZW0gfSB9KSA9PiB7XG5cbiAgICAgIC8vIGdyYWIgdGhlIGRhdGEgZnJvbSBvdXIgY2FjaGVcbiAgICAgIGNvbnN0IGRhdGEgPSBwcm94eS5yZWFkUXVlcnkoeyBxdWVyeTogQUxMX0lURU1TX1FVRVJZIH0pO1xuXG4gICAgICAvLyBmaWx0ZXIgb3V0IHRoZSBkZWx0ZWQgaXRlbVxuICAgICAgZGF0YS5hbGxJdGVtcyA9IGRhdGEuYWxsSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gZGVsZXRlSXRlbS5pZCk7XG5cbiAgICAgIC8vIGFuZCB0aGVuIFwic2V0IHN0YXRlXCIgKHVwZGF0ZSBjYWNoZSksIHNvIGl0IHdpbGwgdXBkYXRlIHdoZXJlZXZlciB3ZSBoYXZlIHVzZWQgdGhpcyBkYXRhIG9uIHRoZSBwYWdlXG4gICAgICBwcm94eS53cml0ZVF1ZXJ5KHsgcXVlcnk6IEFMTF9JVEVNU19RVUVSWSwgZGF0YSB9KTtcblxuICAgIH0sXG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKGl0ZW1zRW5haG5jZXIsIGRlbGV0ZUl0ZW1FbmhhbmNlcikoSXRlbUxpc3QpXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb21wb25lbnRzL0l0ZW1zLmpzIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ3JhcGhxbCwgZ3FsIH0gZnJvbSAncmVhY3QtYXBvbGxvJ1xuaW1wb3J0IHsgQUxMX0lURU1TX1FVRVJZLCBDUkVBVEVfTElOS19NVVRBVElPTiB9IGZyb20gJy4uL3F1ZXJpZXMnO1xuXG5jbGFzcyBDcmVhdGVMaW5rIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBzdGF0ZSA9IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgdGl0bGU6ICcnLFxuICAgIGltYWdlOiAnJyxcbiAgICBwcmljZTogMCxcbiAgICBmdWxsUHJpY2U6IDAsXG4gICAgbG9hZGluZzogZmFsc2VcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgY29uc29sZS5sb2cobmV4dFByb3BzKTtcbiAgfVxuXG4gIHVwbG9hZEZpbGUgPSBhc3luYyAoZSkgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS5jdXJyZW50VGFyZ2V0LmZpbGVzO1xuXG4gICAgbGV0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBkYXRhLmFwcGVuZCgnZGF0YScsIGZpbGVzWzBdKTtcblxuICAgIC8vIHVzZSB0aGUgZmlsZSBlbmRwb2ludFxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCdodHRwczovL2FwaS5ncmFwaC5jb29sL2ZpbGUvdjEvY2o1eHo4c3pzMjg5MzAxNDVnY3Q4MmJkaicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZGF0YVxuICAgIH0pO1xuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGNvbnNvbGUubG9nKGZpbGUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBpbWFnZTogZmlsZS5pZCB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgeyB0aGlzLnN0YXRlLmxvYWRpbmcgPyAnTE9BRElORy4uLicgOiAnUmVhZHkhJyB9XG4gICAgICAgIDxmb3JtIG9uU3VibWl0PXt0aGlzLl9jcmVhdGVMaW5rfT5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIEltYWdlXG4gICAgICAgICAgICA8aW5wdXQgb25DaGFuZ2U9e3RoaXMudXBsb2FkRmlsZX0gdHlwZT0nZmlsZScvPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8cD5UaXRsZVxuICAgICAgICAgICAgPGlucHV0IHZhbHVlPXt0aGlzLnN0YXRlLnRpdGxlfSBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyB0aXRsZTogZS50YXJnZXQudmFsdWUgfSl9IHR5cGU9J3RleHQnIHBsYWNlaG9sZGVyPSdBIGRlc2NyaXB0aW9uIGZvciB0aGUgbGluaycvPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8bGFiZWw+UHJpY2U8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjBcIiB2YWx1ZT17dGhpcy5zdGF0ZS5wcmljZX0gb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgcHJpY2U6IGUudGFyZ2V0LnZhbHVlIH0pfSAvPjwvbGFiZWw+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGRlc2NyaXB0aW9uOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgIHR5cGU9J3RleHQnXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj0nVGhlIGRlc2MgZm9yIHRoaXMgaXRlbSdcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIj5TdWJtaXQ8L2J1dHRvbj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgX2NyZWF0ZUxpbmsgPSBhc3luYyAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAvLyBwdWxsIHRoZSB2YWx1ZXMgZnJvbSBzdGF0ZVxuICAgIGNvbnN0IHsgZGVzY3JpcHRpb24sIHRpdGxlLCBpbWFnZSwgcHJpY2UsIGZ1bGxQcmljZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICAvLyBjcmVhdGUgYSBtdXRhdGlvblxuICAgIC8vIFRPRE86IGhhbmRsZSBhbnkgZXJyb3JzXG4gICAgLy8gdHVybiBsb2FkaW5nIG9uXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IHRydWUgfSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5wcm9wcy5jcmVhdGVMaW5rTXV0YXRpb24oe1xuICAgICAgLy8gcGFzcyBpbiB0aG9zZSB2YXJpYWJsZXMgZnJvbSBzdGF0ZVxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgcHJpY2U6IHBhcnNlSW50KHByaWNlKSxcbiAgICAgICAgZnVsbFByaWNlLFxuICAgICAgICBpbWFnZUlkOiBpbWFnZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSB9KTtcbiAgfVxufVxuLy8gV2hlbiB3ZSBzdWJtaXQgdGhpcyBtdXRhdGlvbiwgd2UgbmVlZCB0byB1cGRhdGUgb3VyIHN0b3JlIC0gd2UgaGF2ZSBhIGZldyB3YXlzIHRvIGRvIHRoYXQ6XG4vLyBPbmUgLSB3ZSBjYW4gZ28gbnVjdWxhciBhbmQgcnVuIHJlZmV0Y2hRdWVyaWVzKCkgd2hpY2ggd2lsbCBqdXN0IGdvIGdldCBldmVyeXRoaW5nIC0gdGhpcyBpcyBlYXN5LCBidXQgYXQgdGhlIGNvc3Qgb2YgZWZmaWNpZW5jeS5cblxuXG5leHBvcnQgZGVmYXVsdCBncmFwaHFsKENSRUFURV9MSU5LX01VVEFUSU9OLCB7IG5hbWU6ICdjcmVhdGVMaW5rTXV0YXRpb24nLCBvcHRpb25zOiB7XG4gICAgLy8gRWFzeSwgYnV0IHNsb3dcbiAgICAvLyByZWZldGNoUXVlcmllczogWydBbGxMaW5rc1F1ZXJ5J11cbiAgICAvLyBUaGlzIGlzIG11Y2ggQmV0dGVyIC8gZWZmaWNpZW50XG4gICAgLy8gTm90aWNlIGhvdyB0aGUgdmFyaWFibGUgaXMgY2FsbGVkIGNyZWF0ZUl0ZW0gLSB0aGF0IGlzIGJlY2F1c2UgY3JlYXRlSXRlbSBpcyB0aGUgbmFtZSBvZiB0aGUgcXVlcnkhXG4gICAgdXBkYXRlOiAocHJveHksIHsgZGF0YTogeyBjcmVhdGVJdGVtIH0gfSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coe2NyZWF0ZUl0ZW0sIEFMTF9JVEVNU19RVUVSWX0pO1xuICAgICAgY29uc3QgZGF0YSA9IHByb3h5LnJlYWRRdWVyeSh7IHF1ZXJ5OiBBTExfSVRFTVNfUVVFUlkgfSk7XG4gICAgICAvLyBkYXRhIGlzIG91ciBzdG9yZSwgYWxsSXRlbXMgaXMgb3VyIHN1Yi1cInN0YXRlXCIsIGl0J3MganVzdCBhbiBhcnJheS4gV2UgY2FuIGp1c3QgYWRkIGl0IHRvXG4gICAgICBkYXRhLmFsbEl0ZW1zLnVuc2hpZnQoY3JlYXRlSXRlbSk7XG4gICAgICAvLyBhbmQgdGhlbiBcInNldCBzdGF0ZVwiLCBzbyBpdCB3aWxsIHVwZGF0ZSBvbiB0aGUgcGFnZS4gVGhpcyB3aWxsIHVwZGF0ZSB0aGUgY2FjaGUgZm9yIHVzIVxuICAgICAgcHJveHkud3JpdGVRdWVyeSh7IHF1ZXJ5OiBBTExfSVRFTVNfUVVFUlksIGRhdGEgfSk7XG4gICAgfSxcbiAgfSB9KShDcmVhdGVMaW5rKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY29tcG9uZW50cy9DcmVhdGVJdGVtLmpzIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ3JhcGhxbCwgZ3FsIH0gZnJvbSAncmVhY3QtYXBvbGxvJ1xuaW1wb3J0IHsgQ1JFQVRFX1VTRVJfTVVUQVRJT04gfSBmcm9tICcuLi9xdWVyaWVzJztcblxuY2xhc3MgU2lnbnVwIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IGlkVG9rZW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/ICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXV0aDBJZFRva2VuJykgfHwgJycgOiAnJztcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZW1haWw6ICcnLFxuICAgICAgbmFtZTogJycsXG4gICAgICBpZFRva2VuLFxuICAgICAgZXJyb3I6IHVuZGVmaW5lZFxuICAgIH1cblxuICB9XG5cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIHsgdGhpcy5zdGF0ZS5sb2FkaW5nID8gJ0xPQURJTkcuLi4nIDogJ1JlYWR5IScgfVxuXG4gICAgICAgIHsgdGhpcy5zdGF0ZS5lcnJvciA/IDxwPnt0aGlzLnN0YXRlLmVycm9yLm1lc3NhZ2V9PC9wPiA6ICcnIH1cblxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17dGhpcy5fY3JlYXRlVXNlcn0+XG4gICAgICAgICAgPHA+RW1haWxcbiAgICAgICAgICAgIDxpbnB1dCB2YWx1ZT17dGhpcy5zdGF0ZS5lbWFpbH0gb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgZW1haWw6IGUudGFyZ2V0LnZhbHVlIH0pfSB0eXBlPSd0ZXh0JyBwbGFjZWhvbGRlcj0nZW1haWwnLz5cbiAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICA8cD5OYW1lXG4gICAgICAgICAgICA8aW5wdXQgdmFsdWU9e3RoaXMuc3RhdGUubmFtZX0gb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgbmFtZTogZS50YXJnZXQudmFsdWUgfSl9IHR5cGU9J3RleHQnIHBsYWNlaG9sZGVyPSduYW1lJy8+XG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPHA+aWRUb2tlblxuICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIHZhbHVlPXt0aGlzLnN0YXRlLmlkVG9rZW59IG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGlkVG9rZW46IGUudGFyZ2V0LnZhbHVlIH0pfSB0eXBlPSd0ZXh0JyBwbGFjZWhvbGRlcj0nbmFtZScvPlxuICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiPlN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICBfY3JlYXRlVXNlciA9IGFzeW5jIChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vIHB1bGwgdGhlIHZhbHVlcyBmcm9tIHN0YXRlXG4gICAgY29uc3QgeyBlbWFpbCwgbmFtZSwgaWRUb2tlbiB9ID0gdGhpcy5zdGF0ZVxuICAgIC8vIGNyZWF0ZSBhIG11dGF0aW9uXG4gICAgLy8gVE9ETzogaGFuZGxlIGFueSBlcnJvcnNcbiAgICAvLyB0dXJuIGxvYWRpbmcgb25cbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSB9KTtcbiAgICBjb25zb2xlLmxvZyhuYW1lLCBlbWFpbCwgaWRUb2tlbik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucHJvcHMuY3JlYXRlVXNlck11dGF0aW9uKHtcbiAgICAgICAgLy8gcGFzcyBpbiB0aG9zZSB2YXJpYWJsZXMgZnJvbSBzdGF0ZVxuICAgICAgICB2YXJpYWJsZXM6IHsgbmFtZSwgZW1haWwsIGlkVG9rZW4gfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yIH0pO1xuICAgICAgY29uc29sZS5kaXIoZXJyb3IpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XG4gIH1cbn1cbi8vIFdoZW4gd2Ugc3VibWl0IHRoaXMgbXV0YXRpb24sIHdlIG5lZWQgdG8gdXBkYXRlIG91ciBzdG9yZSAtIHdlIGhhdmUgYSBmZXcgd2F5cyB0byBkbyB0aGF0OlxuLy8gT25lIC0gd2UgY2FuIGdvIG51Y3VsYXIgYW5kIHJ1biByZWZldGNoUXVlcmllcygpIHdoaWNoIHdpbGwganVzdCBnbyBnZXQgZXZlcnl0aGluZyAtIHRoaXMgaXMgZWFzeSwgYnV0IGF0IHRoZSBjb3N0IG9mIGVmZmljaWVuY3kuXG5cblxuZXhwb3J0IGRlZmF1bHQgZ3JhcGhxbChDUkVBVEVfVVNFUl9NVVRBVElPTiwgeyBuYW1lOiAnY3JlYXRlVXNlck11dGF0aW9uJywgb3B0aW9uczoge1xuICAgIC8vIEVhc3ksIGJ1dCBzbG93XG4gICAgLy8gcmVmZXRjaFF1ZXJpZXM6IFsnQWxsTGlua3NRdWVyeSddXG4gICAgLy8gVGhpcyBpcyBtdWNoIEJldHRlciAvIGVmZmljaWVudFxuICAgIC8vIE5vdGljZSBob3cgdGhlIHZhcmlhYmxlIGlzIGNhbGxlZCBjcmVhdGVJdGVtIC0gdGhhdCBpcyBiZWNhdXNlIGNyZWF0ZUl0ZW0gaXMgdGhlIG5hbWUgb2YgdGhlIHF1ZXJ5IVxuICB9IH0pKFNpZ251cClcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvU2lnbnVwLmpzIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBBdXRoMExvY2sgZnJvbSAnYXV0aDAtbG9jaydcblxuY2xhc3MgTG9naW5BdXRoMCBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgaWYodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGBodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbnVwYDtcbiAgICBjb25zb2xlLmxvZyhyZWRpcmVjdFVybCk7XG4gICAgdGhpcy5fbG9jayA9IG5ldyBBdXRoMExvY2soJ2w4NTFldjJxOFg0OHdmNTZlR0xqSVdGYk13d2J2V1BFJywgJ3dlc2Jvcy5hdXRoMC5jb20nLCB7XG4gICAgICBhdXRoOiB7XG4gICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZVVzZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgdmFyaWFibGVzID0ge1xuICAgICAgaWRUb2tlbjogd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYXV0aDBJZFRva2VuXCIpLFxuICAgICAgZW1haWxBZGRyZXNzOiAnd2VzYm9zQGdtYWlsLmNvbScsXG4gICAgICBuYW1lOiAnSGFyZGNvZGVkIFdlcydcbiAgICB9O1xuICAgIC8vIFRPRE8gLSBtYWtlIGEgY3JlYXRlVXNlciBmdW5jdGlvblxuICAgIHRoaXMucHJvcHNcbiAgICAgIC5jcmVhdGVVc2VyKHsgdmFyaWFibGVzIH0pXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMucHJvcHMuaGlzdG9yeS5yZXBsYWNlKFwiL1wiKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIHRoaXMucHJvcHMuaGlzdG9yeS5yZXBsYWNlKFwiL1wiKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnNvbGUubG9nKCdNT1VOVCcpO1xuICAgIHRoaXMuX2xvY2sub24oJ2F1dGhlbnRpY2F0ZWQnLCAoYXV0aFJlc3VsdCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ0hJSUlJSUlJSScpXG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2F1dGgwSWRUb2tlbicsIGF1dGhSZXN1bHQuaWRUb2tlbilcbiAgICAgIGNvbnNvbGUubG9nKCdEb25lIScsIGF1dGhSZXN1bHQpO1xuICAgIH0pXG4gIH1cblxuICBfc2hvd0xvZ2luID0gKCkgPT4ge1xuICAgIHRoaXMuX2xvY2suc2hvdygpXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxidXR0b24gb25DbGljaz17dGhpcy5fc2hvd0xvZ2lufT5Mb2cgaW4gd2l0aCBBdXRoMCA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMb2dpbkF1dGgwO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY29tcG9uZW50cy9Mb2dpbkF1dGgwLmpzIiwiaW1wb3J0IEhlYWRlciBmcm9tICcuL0hlYWRlcidcbmltcG9ydCBNZXRhIGZyb20gJy4vTWV0YSdcbmltcG9ydCB3aXRoRGF0YSBmcm9tICcuLi9saWIvd2l0aERhdGEnO1xuaW1wb3J0IE5hdiBmcm9tICcuL05hdic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuY29uc3QgU3R5bGVkUGFnZSA9IHN0eWxlZC5kaXZgXG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICBjb2xvcjogIzMwMzAzMDtcbiAgYmFja2dyb3VuZDogI2VmYzYwMDtcbiAgcGFkZGluZzogMTAwcHg7XG5gO1xuXG5jb25zdCBQYWdlID0gKHsgY2hpbGRyZW4gfSkgPT4gKFxuICA8U3R5bGVkUGFnZSBjbGFzc05hbWU9XCJtYWluXCI+XG4gICAgPE1ldGEgLz5cbiAgICA8SGVhZGVyIC8+XG4gICAgPE5hdj48L05hdj5cbiAgICA8ZGl2PlxuICAgICAgeyBjaGlsZHJlbiB9XG4gICAgPC9kaXY+XG4gIDwvU3R5bGVkUGFnZT5cbilcblxuZXhwb3J0IGRlZmF1bHQgd2l0aERhdGEoUGFnZSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb21wb25lbnRzL1BhZ2UuanMiLCJpbXBvcnQgTGluayBmcm9tICduZXh0L2xpbmsnXG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IChcbiAgPHVsPlxuICAgIDxMaW5rIGhyZWY9XCIvXCI+PGE+SG9tZTwvYT48L0xpbms+XG4gICAgPExpbmsgaHJlZj1cIi9zaWdudXAvXCI+PGE+U2lnbnVwPC9hPjwvTGluaz5cbiAgICA8TGluayBocmVmPVwiL29yZGVycy9cIj48YT5PcmRlcnM8L2E+PC9MaW5rPlxuICA8L3VsPlxuKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY29tcG9uZW50cy9OYXYuanMiLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgd2l0aERhdGEgZnJvbSAnLi4vbGliL3dpdGhEYXRhJztcbmltcG9ydCBJdGVtcyBmcm9tICcuLi9jb21wb25lbnRzL0l0ZW1zJztcbmltcG9ydCBDcmVhdGVJdGVtIGZyb20gJy4uL2NvbXBvbmVudHMvQ3JlYXRlSXRlbSc7XG5pbXBvcnQgU2lnbnVwIGZyb20gJy4uL2NvbXBvbmVudHMvU2lnbnVwJztcbmltcG9ydCBMb2dpbkF1dGgwIGZyb20gJy4uL2NvbXBvbmVudHMvTG9naW5BdXRoMCc7XG5pbXBvcnQgUGFnZSBmcm9tICcuLi9jb21wb25lbnRzL1BhZ2UnO1xuaW1wb3J0IE9yZGVyTGlzdCBmcm9tICcuLi9jb21wb25lbnRzL09yZGVyTGlzdCc7XG5cbmNsYXNzIE9yZGVycyBleHRlbmRzIENvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFBhZ2U+XG4gICAgICAgIDxoMj5NeSBPcmRlcnM8L2gyPlxuICAgICAgICA8T3JkZXJMaXN0Lz5cbiAgICAgIDwvUGFnZT5cbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgT3JkZXJzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcGFnZXMvb3JkZXJzLmpzP2VudHJ5IiwiaW1wb3J0IHsgQXBvbGxvQ2xpZW50LCBjcmVhdGVOZXR3b3JrSW50ZXJmYWNlIH0gZnJvbSAncmVhY3QtYXBvbGxvJ1xuaW1wb3J0IGZldGNoIGZyb20gJ2lzb21vcnBoaWMtZmV0Y2gnXG5cbmxldCBhcG9sbG9DbGllbnQgPSBudWxsXG5cbi8vIFBvbHlmaWxsIGZldGNoKCkgb24gdGhlIHNlcnZlciAodXNlZCBieSBhcG9sbG8tY2xpZW50KVxuaWYgKCFwcm9jZXNzLmJyb3dzZXIpIHtcbiAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbn1cblxuZnVuY3Rpb24gY3JlYXRlIChpbml0aWFsU3RhdGUpIHtcblxuICBjb25zdCBuZXR3b3JrSW50ZXJmYWNlID0gY3JlYXRlTmV0d29ya0ludGVyZmFjZSh7XG4gICAgdXJpOiAnaHR0cHM6Ly9hcGkuZ3JhcGguY29vbC9zaW1wbGUvdjEvY2o1eHo4c3pzMjg5MzAxNDVnY3Q4MmJkaicsIC8vIFNlcnZlciBVUkwgKG11c3QgYmUgYWJzb2x1dGUpXG4gICAgb3B0czogeyAvLyBBZGRpdGlvbmFsIGZldGNoKCkgb3B0aW9ucyBsaWtlIGBjcmVkZW50aWFsc2Agb3IgYGhlYWRlcnNgXG4gICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHVzZSB0aGUgYXV0aDBJZFRva2VuIGluIGxvY2FsU3RvcmFnZSBmb3IgYXV0aG9yaXplZCByZXF1ZXN0c1xuICBuZXR3b3JrSW50ZXJmYWNlLnVzZShbXG4gICAge1xuICAgICAgYXBwbHlNaWRkbGV3YXJlKHJlcSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlcS5vcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICByZXEub3B0aW9ucy5oZWFkZXJzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgdGhlIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZyb20gbG9jYWwgc3RvcmFnZSBpZiBpdCBleGlzdHNcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYXV0aDBJZFRva2VuXCIpKSB7XG4gICAgICAgICAgcmVxLm9wdGlvbnMuaGVhZGVycy5hdXRob3JpemF0aW9uID0gYEJlYXJlciAke2xvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYXV0aDBJZFRva2VuXCIpfWA7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG5cbiAgcmV0dXJuIG5ldyBBcG9sbG9DbGllbnQoe1xuICAgIGluaXRpYWxTdGF0ZSxcbiAgICBzc3JNb2RlOiAhcHJvY2Vzcy5icm93c2VyLCAvLyBEaXNhYmxlcyBmb3JjZUZldGNoIG9uIHRoZSBzZXJ2ZXIgKHNvIHF1ZXJpZXMgYXJlIG9ubHkgcnVuIG9uY2UpXG4gICAgbmV0d29ya0ludGVyZmFjZVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0QXBvbGxvIChpbml0aWFsU3RhdGUpIHtcbiAgLy8gTWFrZSBzdXJlIHRvIGNyZWF0ZSBhIG5ldyBjbGllbnQgZm9yIGV2ZXJ5IHNlcnZlci1zaWRlIHJlcXVlc3Qgc28gdGhhdCBkYXRhXG4gIC8vIGlzbid0IHNoYXJlZCBiZXR3ZWVuIGNvbm5lY3Rpb25zICh3aGljaCB3b3VsZCBiZSBiYWQpXG4gIGlmICghcHJvY2Vzcy5icm93c2VyKSB7XG4gICAgcmV0dXJuIGNyZWF0ZShpbml0aWFsU3RhdGUpXG4gIH1cblxuICAvLyBSZXVzZSBjbGllbnQgb24gdGhlIGNsaWVudC1zaWRlXG4gIGlmICghYXBvbGxvQ2xpZW50KSB7XG4gICAgYXBvbGxvQ2xpZW50ID0gY3JlYXRlKGluaXRpYWxTdGF0ZSlcbiAgfVxuXG4gIHJldHVybiBhcG9sbG9DbGllbnRcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2xpYi9pbml0QXBvbGxvLmpzIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ3JhcGhxbCwgZ3FsLCBjb21wb3NlIH0gZnJvbSAncmVhY3QtYXBvbGxvJ1xuaW1wb3J0IHsgU0lOR0xFX0xJTktfUVVFUlksIFVQREFURV9MSU5LX01VVEFUSU9OIH0gZnJvbSAnLi4vcXVlcmllcyc7XG5cbmNsYXNzIFVwZGF0ZUxpbmsgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIHN0YXRlID0ge1xuICAgIC4uLnRoaXMucHJvcHMuZmluZEl0ZW0uSXRlbSxcbiAgfVxuXG4gIHNhdmVUb1N0YXRlID0gKGUpID0+IHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSwgdHlwZSB9ID0gZS50YXJnZXQ7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cblxuICAgICAgICA8aDI+RWRpdCB7dGhpcy5wcm9wcy5pZH08L2gyPlxuICAgICAgICB7IHRoaXMuc3RhdGUubG9hZGluZyA/ICdMT0FESU5HLi4uJyA6ICdSZWFkeSEnIH1cbiAgICAgICAgPGZvcm0gb25TdWJtaXQ9e3RoaXMuX2NyZWF0ZUxpbmt9PlxuXG4gICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJ0aXRsZVwiPlRpdGxlPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdmFsdWU9e3RoaXMuc3RhdGUudGl0bGV9IG5hbWU9XCJ0aXRsZVwiIG9uQ2hhbmdlPXt0aGlzLnNhdmVUb1N0YXRlfSB0eXBlPSd0ZXh0Jy8+XG5cbiAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImRlc2NyaXB0aW9uXCI+RGVzY3JpcHRpb248L2xhYmVsPlxuICAgICAgICAgIDx0ZXh0YXJlYSB2YWx1ZT17dGhpcy5zdGF0ZS5kZXNjcmlwdGlvbn0gbmFtZT1cImRlc2NyaXB0aW9uXCIgb25DaGFuZ2U9e3RoaXMuc2F2ZVRvU3RhdGV9PjwvdGV4dGFyZWE+XG5cbiAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInByaWNlXCI+UHJpY2U8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbmFtZT1cInByaWNlXCIgb25DaGFuZ2U9e3RoaXMuc2F2ZVRvU3RhdGV9IHZhbHVlPXt0aGlzLnN0YXRlLnByaWNlfSAvPlxuXG4gICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJmdWxsUHJpY2VcIj5GdWxsIFByaWNlPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG5hbWU9XCJmdWxsUHJpY2VcIiBvbkNoYW5nZT17dGhpcy5zYXZlVG9TdGF0ZX0gdmFsdWU9e3RoaXMuc3RhdGUuZnVsbFByaWNlfSAvPlxuXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCI+U2F2ZS4uLjwvYnV0dG9uPlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICBfY3JlYXRlTGluayA9IGFzeW5jIChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vIHB1bGwgdGhlIHZhbHVlcyBmcm9tIHN0YXRlXG4gICAgY29uc3QgeyBkZXNjcmlwdGlvbiwgdGl0bGUgfSA9IHRoaXMuc3RhdGVcbiAgICBjb25zdCB7IGlkIH0gPSB0aGlzLnByb3BzO1xuICAgIC8vIGNyZWF0ZSBhIG11dGF0aW9uXG4gICAgLy8gVE9ETzogaGFuZGxlIGFueSBlcnJvcnNcbiAgICAvLyB0dXJuIGxvYWRpbmcgb25cbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSB9KTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YXRlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnByb3BzLnVwZGF0ZUl0ZW0oe1xuICAgICAgLy8gcGFzcyBpbiB0aG9zZSB2YXJpYWJsZXMgZnJvbSBzdGF0ZVxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XG4gIH1cblxufVxuXG5jb25zdCBDb21wb25lbnRXaXRoTXV0YXRpb25zID0gY29tcG9zZShcbiAgLy8gRmlyc3QsIHF1ZXJ5IGZvciBnZXR0aW5nIHRoZSBsaW5rXG4gIGdyYXBocWwoU0lOR0xFX0xJTktfUVVFUlksIHtcbiAgICBuYW1lOiAnZmluZEl0ZW0nLFxuICAgIG9wdGlvbnM6ICh7IGlkIH0pID0+ICh7XG4gICAgICB2YXJpYWJsZXM6IHsgaWQgfVxuICAgIH0pXG4gIH0pLFxuICAvLyBTZWNvbmQsIHRoZSBtdXRhdGlvbiBmb3IgdXBkYXRpbmcgdGhlIGxpbmtcbiAgZ3JhcGhxbChVUERBVEVfTElOS19NVVRBVElPTiwgeyBuYW1lOiAndXBkYXRlSXRlbScgfSlcbikoVXBkYXRlTGluayk7XG5cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50V2l0aE11dGF0aW9ucztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvVXBkYXRlSXRlbS5qcyIsImltcG9ydCB7IGdxbCB9IGZyb20gJ3JlYWN0LWFwb2xsbyc7XG5cbmV4cG9ydCBjb25zdCBpdGVtRGV0YWlscyA9IGdxbGBcbiAgZnJhZ21lbnQgaXRlbURldGFpbHMgb24gSXRlbSB7XG4gICAgICBpZFxuICAgICAgdGl0bGVcbiAgICAgIHByaWNlXG4gICAgICBmdWxsUHJpY2VcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgICBpbWFnZSB7XG4gICAgICAgIGlkXG4gICAgICAgIHVybFxuICAgICAgICBzZWNyZXRcbiAgICAgIH1cbiAgfVxuYDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3F1ZXJpZXMvZnJhZ21lbnRzLmpzIiwiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFN0cmlwZUNoZWNrb3V0IGZyb20gJ3JlYWN0LXN0cmlwZS1jaGVja291dCc7XG5pbXBvcnQgeyBDUkVBVEVfT1JERVJfTVVUQVRJT04sIENVUlJFTlRfVVNFUl9RVUVSWSB9IGZyb20gJy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgZ3JhcGhxbCwgY29tcG9zZSB9IGZyb20gJ3JlYWN0LWFwb2xsbyc7XG5cblxuY2xhc3MgVGFrZU15TW9uZXkgZXh0ZW5kcyBDb21wb25lbnQge1xuICBvblRva2VuID0gYXN5bmMgKHJlcykgPT4ge1xuICAgIGNvbnN0IHRva2VuID0gcmVzLmlkO1xuICAgIGNvbnN0IHVzZXJJZCA9IHRoaXMucHJvcHMuY3VycmVudFVzZXJRdWVyeS51c2VyLmlkO1xuICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMucHJvcHMuaWQ7XG4gICAgY29uc29sZS5sb2coYEdvaW5nIHRvIG1ha2UgYSBwdXJjaGFzZSB3aXRoICR7dG9rZW59YCk7XG4gICAgY29uc29sZS5sb2coYFRIZSBwZXJzb24gdGhhdCBib3VnaHQgdGhpcyB3YXMgJHt1c2VySWR9YClcbiAgICBjb25zb2xlLmxvZyhgVGhlIGl0ZW0gaWQgaXMgJHtpdGVtSWR9YClcbiAgICBjb25zdCBjaGFyZ2UgPSBhd2FpdCB0aGlzLnByb3BzLmNyZWF0ZU9yZGVyKHsgdmFyaWFibGVzOiB7IHRva2VuLCB1c2VySWQsIGl0ZW1JZCB9fSk7XG4gICAgYWxlcnQoYEJhY2sgZnJvbSB0aGUgY2hhcmdlISAke2NoYXJnZS5pZH1gKTtcbiAgICBjb25zb2xlLmxvZyhjaGFyZ2UpO1xuXG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnByb3BzLmN1cnJlbnRVc2VyUXVlcnkudXNlciB8fCB7fTtcbiAgICBjb25zdCBlbWFpbCA9IHVzZXIuZW1haWwgfHwgJyc7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxTdHJpcGVDaGVja291dFxuICAgICAgICAgIGFtb3VudD17dGhpcy5wcm9wcy5hbW91bnR9XG4gICAgICAgICAgbmFtZT17dGhpcy5wcm9wcy5uYW1lfVxuICAgICAgICAgIGRlc2NyaXB0aW9uPXt0aGlzLnByb3BzLmRlc2NyaXB0aW9ufVxuICAgICAgICAgIHRva2VuPXt0aGlzLm9uVG9rZW59XG4gICAgICAgICAgc3RyaXBlS2V5PVwicGtfbGNsVHRUaEZwOENuTzNRdEVaU2Q4SEE5bUZVcHNcIlxuICAgICAgICAgIGN1cnJlbmN5PVwiVVNEXCJcbiAgICAgICAgICBlbWFpbD17ZW1haWx9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgPC9TdHJpcGVDaGVja291dD5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufVxuXG5jb25zdCB1c2VyRW5oYW5jZXIgPSBncmFwaHFsKENVUlJFTlRfVVNFUl9RVUVSWSwgeyBuYW1lOiAnY3VycmVudFVzZXJRdWVyeScgfSk7XG5jb25zdCBjcmVhdGVPcmRlckVuaGFuY2VyID0gZ3JhcGhxbChDUkVBVEVfT1JERVJfTVVUQVRJT04sIHsgbmFtZTogJ2NyZWF0ZU9yZGVyJyB9KTtcbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UodXNlckVuaGFuY2VyLCBjcmVhdGVPcmRlckVuaGFuY2VyKShUYWtlTXlNb25leSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb21wb25lbnRzL1Rha2VNeU1vbmV5LmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYW1vdW50KSB7XG4gIHJldHVybiAnJCcgKyAgKGFtb3VudCAvIDEwMCkudG9Mb2NhbGVTdHJpbmcoKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2xpYi9mb3JtYXRNb25leS5qcyIsIi8vIFRPRE86IFB1dCB0aGUgcHJvamVjdCBJRCBpbiBhIGNvbmZpZyBmaWxlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW1hZ2UsIHdpZHRoID0gMzAwLCBoZWlnaHQgPSAzMDApIHtcbiAgaWYoIWltYWdlIHx8ICFpbWFnZS5zZWNyZXQpIHJldHVybiAnJztcbiAgcmV0dXJuIGBodHRwczovL2ltYWdlcy5ncmFwaC5jb29sL3YxL2NqNXh6OHN6czI4OTMwMTQ1Z2N0ODJiZGovJHtpbWFnZS5zZWNyZXR9LyR7d2lkdGh9eCR7aGVpZ2h0fWA7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9saWIvaW1hZ2UuanMiLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdyYXBocWwsIGNvbXBvc2UgfSBmcm9tICdyZWFjdC1hcG9sbG8nXG5pbXBvcnQgeyBDVVJSRU5UX1VTRVJfUVVFUlkgfSBmcm9tICcuLi9xdWVyaWVzJztcblxuY2xhc3MgSGVhZGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAvLyBUaGlzIGZldGNoZXMgdGhlIG5ldyBkYXRhLCBidXQgZG9lc24ndCBwb3B1bGF0ZSB0aGUgdXNlciB2aWEgcHJvcHNcbiAgICAvLyB0aGlzLnByb3BzLmN1cnJlbnRVc2VyUXVlcnkucmVmZXRjaCgpO1xuICAgIC8vIFRoaXMgZmV0Y2hlcyB0aGUgbmV3IGRhdGEsIGFuZCBwb3B1bGF0ZXMgdGhlIHVzZXIgdmlhIHByb3BzXG4gICAgc2V0VGltZW91dCh0aGlzLnByb3BzLmN1cnJlbnRVc2VyUXVlcnkucmVmZXRjaCwgMSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc29sZS5sb2codGhpcy5wcm9wcy5jdXJyZW50VXNlclF1ZXJ5LnVzZXIpO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnByb3BzLmN1cnJlbnRVc2VyUXVlcnkudXNlciB8fCB7fTtcbiAgICBjb25zdCB7IGVtYWlsID0gJycgfSA9IHVzZXI7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPHA+e2VtYWlsfSBJJ20gdGhlIGhlYWRlciE8L3A+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbn1cblxuY29uc3QgdXNlckVuaGFuY2VyID0gZ3JhcGhxbChDVVJSRU5UX1VTRVJfUVVFUlksIHsgbmFtZTogJ2N1cnJlbnRVc2VyUXVlcnknIH0pO1xuZXhwb3J0IGRlZmF1bHQgY29tcG9zZSh1c2VyRW5oYW5jZXIpKEhlYWRlcilcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvSGVhZGVyLmpzIiwiaW1wb3J0IEhlYWQgZnJvbSAnbmV4dC9oZWFkJ1xuaW1wb3J0IFJvdXRlciBmcm9tICduZXh0L3JvdXRlcidcbmltcG9ydCBOYXYgZnJvbSAnLi9OYXYnO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiAoXG4gIDxkaXY+XG4gICAgPEhlYWQ+XG4gICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIiAvPlxuICAgICAgPG1ldGEgY2hhclNldD1cInV0Zi04XCIgLz5cbiAgICAgIDxOYXYvPlxuICAgICAgPGxpbmsgcmVsPVwic2hvcnRjdXQgaWNvblwiIGhyZWY9XCJodHRwczovL3dlc2Jvcy5jb20vd3AtY29udGVudC90aGVtZXMvd2IyMDE0L2kvY3Jvd24teWVsbG93LXNtYWxsLnBuZ1wiIC8+XG4gICAgICA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNy4wL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzc1wiLz5cbiAgICAgIDx0aXRsZT5TaWNrIEZpdHM8L3RpdGxlPlxuICAgIDwvSGVhZD5cbiAgPC9kaXY+XG4pXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb21wb25lbnRzL01ldGEuanMiLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgd2l0aERhdGEgZnJvbSAnLi4vbGliL3dpdGhEYXRhJztcbmltcG9ydCBJdGVtcyBmcm9tICcuLi9jb21wb25lbnRzL0l0ZW1zJztcbmltcG9ydCBDcmVhdGVJdGVtIGZyb20gJy4uL2NvbXBvbmVudHMvQ3JlYXRlSXRlbSc7XG5pbXBvcnQgU2lnbnVwIGZyb20gJy4uL2NvbXBvbmVudHMvU2lnbnVwJztcbmltcG9ydCBMb2dpbkF1dGgwIGZyb20gJy4uL2NvbXBvbmVudHMvTG9naW5BdXRoMCc7XG5pbXBvcnQgUGFnZSBmcm9tICcuLi9jb21wb25lbnRzL1BhZ2UnO1xuaW1wb3J0IHsgVVNFUl9PUkRFUlNfUVVFUlkgfSBmcm9tICcuLi9xdWVyaWVzJztcbmltcG9ydCB7IGdyYXBocWwsIGNvbXBvc2UgfSBmcm9tICdyZWFjdC1hcG9sbG8nXG5pbXBvcnQgaGFzIGZyb20gJ2xvZGFzaC5oYXMnO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCBmb3JtYXRNb25leSBmcm9tICcuLi9saWIvZm9ybWF0TW9uZXknO1xuaW1wb3J0IG1ha2VJbWFnZSBmcm9tICcuLi9saWIvaW1hZ2UnO1xuXG5jbGFzcyBPcmRlckxpc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zb2xlLmxvZygnTW91bnRpbmchJyk7XG4gIH1cbiAgcmVuZGVyKCkge1xuXG4gICAgaWYodGhpcy5wcm9wcy5sb2FkaW5nKSB7XG4gICAgICByZXR1cm4gPHA+TG9hZGluZy4uLjwvcD5cbiAgICB9XG5cbiAgICBpZih0aGlzLnByb3BzLmVycm9yKSB7XG4gICAgICByZXR1cm4gPHA+RXJyb3IuLi48L3A+XG4gICAgfVxuXG4gICAgaWYoIWhhcyh0aGlzLnByb3BzLCAndXNlck9yZGVyc1F1ZXJ5LnVzZXIub3JkZXJzJykpIHtcbiAgICAgIHJldHVybiA8cD5Eb24ndCBoYXZlIGl0IHlldCE8L3A+XG4gICAgfVxuXG4gICAgY29uc3Qgb3JkZXJzID0gdGhpcy5wcm9wcy51c2VyT3JkZXJzUXVlcnkudXNlci5vcmRlcnM7XG5cbiAgICBjb25zb2xlLmxvZyhvcmRlcnMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8aDI+WW91IGhhdmUge29yZGVycy5sZW5ndGh9IE9yZGVyczwvaDI+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICB7b3JkZXJzLm1hcChvcmRlciA9PiA8bGkga2V5PXtvcmRlci5pZH0+XG4gICAgICAgICAgICA8aW1nIHNyYz17bWFrZUltYWdlKG9yZGVyLml0ZW0uaW1hZ2UpfSBhbHQ9XCJcIi8+XG4gICAgICAgICAgICA8aDM+e29yZGVyLml0ZW0udGl0bGV9ICh7Zm9ybWF0TW9uZXkob3JkZXIuYW1vdW50KX0pIDwvaDM+XG4gICAgICAgICAgICA8cD57b3JkZXIuaXRlbS5kZXNjcmlwdGlvbn08L3A+XG4gICAgICAgICAgPC9saT4pfVxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG59XG5cbmNvbnN0IG9yZGVyc0VuaGFuY2VyID0gZ3JhcGhxbChVU0VSX09SREVSU19RVUVSWSwgeyBuYW1lOiAndXNlck9yZGVyc1F1ZXJ5JyB9KTtcbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2Uob3JkZXJzRW5oYW5jZXIpKE9yZGVyTGlzdClcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbXBvbmVudHMvT3JkZXJMaXN0LmpzIl0sIm1hcHBpbmdzIjoiO0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUFEQTtBQUNBO0FBYUE7QUFDQTtBQWFBO0FBQ0E7QUFvQkE7QUFDQTtBQVVBO0FBQ0E7QUFRQTtBQUNBO0FBU0E7QUFDQTtBQWNBO0FBQ0E7QUFTQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVHQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFBQTtBQUNBO0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUNBOztBQURBO0FBQUE7QUFNQTtBQU5BO0FBQUE7QUFBQTtBQUFBO0FBT0E7QUFQQTtBQUNBO0FBU0E7QUFDQTtBQVhBO0FBQ0E7QUFVQTtBQVhBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFZQTtBQUNBO0FBREE7QUFaQTtBQUNBO0FBREE7QUFpQkE7QUFqQkE7QUFBQTtBQWtCQTtBQUNBO0FBbkJBO0FBb0JBO0FBQ0E7QUFyQkE7QUFBQTtBQUFBO0FBd0JBO0FBQUE7QUFDQTtBQURBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQTFCQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBZ0NBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQXRDQTtBQUNBOzs7QUEwQ0E7QUFBQTtBQURBO0FBREE7QUFDQTtBQTFDQTs7QUFBQTtBQWlEQTtBQUNBO0FBbERBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFzREE7QUF0REE7QUFDQTtBQXFEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQXpEQTtBQUNBOztBQURBO0FBNERBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUdBO0FBSEE7QUFBQTtBQTlEQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBR0E7QUFBQTtBQUpBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNaQTtBQUNBOzs7QUFBQTtBQUNBO0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFLQTtBQUNBO0FBT0E7Ozs7Ozs7Ozs7O0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBOztBQUFBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQURBO0FBREE7QUFJQTtBQUpBO0FBSUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBOztBQUxBO0FBT0E7QUFQQTtBQU9BOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUE7Ozs7O0FBaERBO0FBQ0E7QUFtREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBRUE7O0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFNQTtBQWZBO0FBRkE7QUFDQTtBQWdCQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUdBO0FBQ0E7OztBQUFBO0FBQ0E7QUFBQTtBQUNBOzs7Ozs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFMQTtBQVlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFMQTtBQUFBO0FBT0E7QUFFQTtBQUFBO0FBREE7QUFDQTtBQUZBO0FBUEE7QUFBQTtBQVdBO0FBQ0E7QUFEQTtBQVhBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFkQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7Ozs7O0FBeUNBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBUEE7QUFRQTtBQUVBOztBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFKQTtBQUZBO0FBQ0E7QUFGQTtBQVJBO0FBQ0E7QUFpQkE7QUFDQTtBQW5CQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7QUE3Q0E7QUFDQTs7OztBQW1CQTtBQUNBO0FBQ0E7QUFBQTs7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUVBO0FBQ0E7QUFEQTtBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUZBO0FBRUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUZBO0FBRUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQURBOztBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTs7QUFKQTtBQU1BO0FBTkE7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUlBOzs7OztBQXREQTtBQTZFQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQUE7QUFYQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2RkE7QUFDQTs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7Ozs7OztBQUNBO0FBRUE7QUFDQTtBQURBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBSEE7QUFDQTtBQUtBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBOztBQUFBO0FBQ0E7QUFEQTtBQUFBOztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQURBO0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUhBO0FBR0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUhBO0FBR0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFHQTtBQUhBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFJQTs7Ozs7QUF2Q0E7QUE4REE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUF4QkE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQVJBO0FBQUE7QUFVQTtBQUVBO0FBQUE7QUFEQTtBQUNBO0FBRkE7QUFWQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQUE7QUFlQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBbkJBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOzs7Ozs7O0FBeUJBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4RUE7QUFDQTs7O0FBQUE7QUFDQTs7Ozs7Ozs7QUFDQTtBQUVBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUpBO0FBS0E7QUFBQTtBQUdBO0FBSEE7QUFNQTtBQUNBO0FBRUE7QUE1QkE7QUFDQTtBQXNDQTtBQUNBO0FBdENBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUFBO0FBREE7QUFJQTs7Ozs7QUFxQkE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFPQTtBQUNBOztBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7Ozs7O0FBR0E7QUFDQTtBQURBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMURBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUNBO0FBREE7QUFBQTtBQU1BO0FBQ0E7QUFEQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkJBO0FBQ0E7Ozs7Ozs7QUFEQTtBQUNBOztBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSkE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0hBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7Ozs7Ozs7O0FBQ0E7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTs7QUFBQTtBQUNBO0FBREE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUdBO0FBSEE7QUFBQTs7Ozs7QUFNQTtBQUNBO0FBREE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JCQTtBQUNBO0FBQUE7QUFDQTs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFMQTtBQURBO0FBQ0E7QUFNQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQWRBO0FBQ0E7O0FBZUE7QUFBQTtBQUdBO0FBSkE7QUFNQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hEQTtBQUNBOzs7QUFBQTtBQUNBO0FBQUE7QUFDQTs7Ozs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBREE7QUE2QkE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFHQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBVEE7QUFVQTtBQUVBO0FBQ0E7QUFGQTtBQUNBO0FBRkE7QUFWQTtBQUNBO0FBZUE7QUFDQTtBQWpCQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7QUF6QkE7QUFDQTs7QUFBQTtBQUVBO0FBRkE7QUFBQTs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFGQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBRkE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUZBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFGQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBRkE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUlBOzs7OztBQXZDQTtBQUNBO0FBNkRBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUVBO0FBQ0E7Ozs7O0FBREE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0hBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7QUFBQTtBQUNBOzs7Ozs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQU5BO0FBT0E7QUFDQTtBQURBO0FBUEE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQVZBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOzs7Ozs7Ozs7OztBQWFBO0FBQUE7QUFDQTtBQUVBOztBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7O0FBUEE7QUFTQTtBQVRBO0FBQ0E7Ozs7O0FBbkJBO0FBQ0E7QUFpQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzNDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0hBO0FBQ0E7OztBQUFBO0FBQ0E7QUFBQTtBQUNBOzs7Ozs7QUFDQTs7Ozs7Ozs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBOzs7O0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7O0FBQUE7QUFDQTtBQURBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7Ozs7O0FBaEJBO0FBQ0E7QUFxQkE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUJBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUVBO0FBQ0E7Ozs7Ozs7QUFEQTtBQUNBOztBQUFBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTs7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFSQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0xBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7Ozs7Ozs7QUFDQTs7Ozs7Ozs7Ozs7QUFFQTtBQUFBOzs7O0FBSUE7QUFDQTtBQURBO0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBREE7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFEQTtBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBOztBQUFBO0FBQ0E7QUFEQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBS0E7Ozs7O0FBakNBO0FBQ0E7QUFtQ0E7QUFDQTtBQUNBOzs7OztBIiwic291cmNlUm9vdCI6IiJ9 + return { page: comp.default } + }) +
\ No newline at end of file |
