summaryrefslogtreecommitdiffstats
path: root/js
diff options
context:
space:
mode:
authorJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2018-08-28 16:02:43 +0200
committerJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2018-08-28 16:02:43 +0200
commitea5973c1a58c2dcca8bafd94e6233aac96155e18 (patch)
tree96557d051ea31f1a71f492976385532335243a81 /js
parent62c320e30be62ea95aa25496c68752b7f3b45957 (diff)
rebase and commit
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Diffstat (limited to 'js')
-rw-r--r--js/contacts.js1040
1 files changed, 265 insertions, 775 deletions
diff --git a/js/contacts.js b/js/contacts.js
index 7ba07db6..ab21fe16 100644
--- a/js/contacts.js
+++ b/js/contacts.js
@@ -86,404 +86,437 @@
/************************************************************************/
/******/ ({
-/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/App.vue?vue&type=script&lang=js&":
-/*!********************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/App.vue?vue&type=script&lang=js& ***!
- \********************************************************************************************************************************/
+/***/ "./node_modules/axios/index.js":
+/*!*************************************!*\
+ !*** ./node_modules/axios/index.js ***!
+ \*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
-"use strict";
-eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nexports.default = {\n\tname: 'App'\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FwcC52dWU/YzY1ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQkEyQkE7QUFDQTtBQURBLEMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvQXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8IS0tXG4gLSBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxOCBKb2huIE1vbGFrdm/DpiA8c2tqbmxkc3ZAcHJvdG9ubWFpbC5jb20+XG4gLVxuIC0gQGF1dGhvciBKb2huIE1vbGFrdm/DpiA8c2tqbmxkc3ZAcHJvdG9ubWFpbC5jb20+XG4gLVxuIC0gQGxpY2Vuc2UgR05VIEFHUEwgdmVyc2lvbiAzIG9yIGFueSBsYXRlciB2ZXJzaW9uXG4gLVxuIC0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAtIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzXG4gLSBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGVcbiAtIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gLVxuIC0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIC0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIC0gR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gLVxuIC0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuIC1cbiAtLT5cblxuPHRlbXBsYXRlPlxuXHQ8cm91dGVyLXZpZXcgLz5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG5cdG5hbWU6ICdBcHAnXG59XG48L3NjcmlwdD5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/App.vue?vue&type=script&lang=js&\n");
+eval("module.exports = __webpack_require__(/*! ./lib/axios */ \"./node_modules/axios/lib/axios.js\");\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanM/MjkwNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/index.js\n");
/***/ }),
-/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/components/ContactDetails.vue?vue&type=script&lang=js&":
-/*!******************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/ContactDetails.vue?vue&type=script&lang=js& ***!
- \******************************************************************************************************************************************************/
+/***/ "./node_modules/axios/lib/adapters/xhr.js":
+/*!************************************************!*\
+ !*** ./node_modules/axios/lib/adapters/xhr.js ***!
+ \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
-eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _vueClickOutside = __webpack_require__(/*! vue-click-outside */ \"./node_modules/vue-click-outside/index.js\");\n\nvar _vueClickOutside2 = _interopRequireDefault(_vueClickOutside);\n\nvar _vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _vTooltip = __webpack_require__(/*! v-tooltip */ \"./node_modules/v-tooltip/dist/v-tooltip.esm.js\");\n\nvar _vTooltip2 = _interopRequireDefault(_vTooltip);\n\nvar _debounce = __webpack_require__(/*! debounce */ \"./node_modules/debounce/index.js\");\n\nvar _debounce2 = _interopRequireDefault(_debounce);\n\nvar _contact = __webpack_require__(/*! ../models/contact */ \"./src/models/contact.js\");\n\nvar _contact2 = _interopRequireDefault(_contact);\n\nvar _rfcProps = __webpack_require__(/*! ../models/rfcProps.js */ \"./src/models/rfcProps.js\");\n\nvar _rfcProps2 = _interopRequireDefault(_rfcProps);\n\nvar _popoverMenu = __webpack_require__(/*! ./core/popoverMenu */ \"./src/components/core/popoverMenu.vue\");\n\nvar _popoverMenu2 = _interopRequireDefault(_popoverMenu);\n\nvar _ContactDetailsProperty = __webpack_require__(/*! ./ContactDetails/ContactDetailsProperty */ \"./src/components/ContactDetails/ContactDetailsProperty.vue\");\n\nvar _ContactDetailsProperty2 = _interopRequireDefault(_ContactDetailsProperty);\n\nvar _PropertySelect = __webpack_require__(/*! ./Properties/PropertySelect */ \"./src/components/Properties/PropertySelect.vue\");\n\nvar _PropertySelect2 = _interopRequireDefault(_PropertySelect);\n\nvar _PropertyGroups = __webpack_require__(/*! ./Properties/PropertyGroups */ \"./src/components/Properties/PropertyGroups.vue\");\n\nvar _PropertyGroups2 = _interopRequireDefault(_PropertyGroups);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n_vue2.default.use(_vTooltip2.default);\n\nexports.default = {\n\tname: 'ContactDetails',\n\n\tcomponents: {\n\t\tPopoverMenu: _popoverMenu2.default,\n\t\tContactDetailsProperty: _ContactDetailsProperty2.default,\n\t\tPropertySelect: _PropertySelect2.default,\n\t\tPropertyGroups: _PropertyGroups2.default\n\t},\n\n\tdirectives: {\n\t\tClickOutside: _vueClickOutside2.default\n\t},\n\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tuid: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined\n\t\t}\n\t},\n\n\tdata: function data() {\n\t\treturn {\n\t\t\topenedMenu: false,\n\t\t\taddressbookModel: {\n\t\t\t\treadableName: t('contacts', 'Addressbook'),\n\t\t\t\ticon: 'icon-addressbook'\n\t\t\t}\n\t\t};\n\t},\n\n\n\tcomputed: {\n\t\t/**\n * Contact color based on uid\n */\n\t\tcolorAvatar: function colorAvatar() {\n\t\t\ttry {\n\t\t\t\tvar color = this.contact.uid.toRgb();\n\t\t\t\treturn 'rgb(' + color.r + ', ' + color.g + ', ' + color.b + ')';\n\t\t\t} catch (e) {\n\t\t\t\treturn 'grey';\n\t\t\t}\n\t\t},\n\n\n\t\t/**\n * Header actions for the contact\n */\n\t\tcontactActions: function contactActions() {\n\t\t\tvar actions = [{\n\t\t\t\ticon: 'icon-download',\n\t\t\t\ttext: t('contacts', 'Download'),\n\t\t\t\thref: this.contact.url\n\t\t\t}];\n\t\t\tif (this.contact.addressbook.enabled) {\n\t\t\t\tactions.push({\n\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\ttext: t('contacts', 'Delete'),\n\t\t\t\t\taction: this.deleteContact\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn actions;\n\t\t},\n\n\n\t\t/**\n * Contact properties copied and sorted by rfcProps.fieldOrder\n */\n\t\tsortedProperties: function sortedProperties() {\n\t\t\treturn this.contact.properties.slice(0).sort(function (a, b) {\n\t\t\t\treturn _rfcProps2.default.fieldOrder.indexOf(a.name) - _rfcProps2.default.fieldOrder.indexOf(b.name);\n\t\t\t});\n\t\t},\n\n\n\t\t// usable addressbook object linked to the local contact\n\t\taddressbook: {\n\t\t\tget: function get() {\n\t\t\t\treturn {\n\t\t\t\t\tid: this.contact.addressbook.id,\n\t\t\t\t\tname: this.contact.addressbook.displayName\n\t\t\t\t};\n\t\t\t},\n\t\t\tset: function set(addressbook) {\n\t\t\t\tthis.moveContactToAddressbook(addressbook);\n\t\t\t}\n\t\t},\n\n\t\t// store getters filtered and mapped to usable object\n\t\taddressbooksOptions: function addressbooksOptions() {\n\t\t\treturn this.addressbooks.filter(function (addressbook) {\n\t\t\t\treturn addressbook.enabled;\n\t\t\t}).map(function (addressbook) {\n\t\t\t\treturn {\n\t\t\t\t\tid: addressbook.id,\n\t\t\t\t\tname: addressbook.displayName\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\n\n\t\t// store getter\n\t\taddressbooks: function addressbooks() {\n\t\t\treturn this.$store.getters.getAddressbooks;\n\t\t},\n\n\n\t\t// local version of the contact\n\t\tcontact: function contact() {\n\t\t\tvar contact = this.$store.getters.getContact(this.uid);\n\t\t\tif (contact) {\n\t\t\t\t// create empty contact and copy inner data\n\t\t\t\tvar localContact = new _contact2.default('BEGIN:VCARD\\nUID:' + contact.uid + '\\nEND:VCARD', contact.addressbook);\n\t\t\t\tlocalContact.updateContact(contact.jCal);\n\t\t\t\treturn localContact;\n\t\t\t}\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n * Executed on the 'updatedcontact' event\n * Send the local clone of contact to the store\n */\n\t\tupdateContact: function updateContact() {\n\t\t\tthis.$store.dispatch('updateContact', this.contact);\n\t\t},\n\n\t\t/**\n * Debounce the contact update for the header props\n * photo, fn, org, title\n */\n\t\tdebounceUpdateContact: (0, _debounce2.default)(function (e) {\n\t\t\tthis.updateContact();\n\t\t}, 500),\n\n\t\t// menu handling\n\t\tcloseMenu: function closeMenu() {\n\t\t\tthis.openedMenu = false;\n\t\t},\n\t\ttoggleMenu: function toggleMenu() {\n\t\t\tthis.openedMenu = !this.openedMenu;\n\t\t},\n\n\n\t\t/**\n * Move contact to the specified addressbook\n *\n * @param {Object} addressbook the desired addressbook\n */\n\t\tmoveContactToAddressbook: function moveContactToAddressbook(addressbook) {\n\t\t\tvar _this = this;\n\n\t\t\taddressbook = this.addressbooks.find(function (search) {\n\t\t\t\treturn search.id === addressbook.id;\n\t\t\t});\n\t\t\t// we need to use the store contact, not the local contact\n\t\t\tvar contact = this.$store.getters.getContact(this.contact.key);\n\t\t\t// TODO Make sure we do not overwrite contacts\n\t\t\tif (addressbook) {\n\t\t\t\tthis.$store.dispatch('moveContactToAddressbook', {\n\t\t\t\t\tcontact: contact,\n\t\t\t\t\taddressbook: addressbook\n\t\t\t\t}).then(function () {\n\t\t\t\t\t_this.updateContact();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2NvbXBvbmVudHMvQ29udGFjdERldGFpbHMudnVlPzBmNjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBaUdBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRUE7Ozs7QUFDQTs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O2tCQUVBO0FBQ0EsdUJBREE7O0FBR0E7QUFDQSxvQ0FEQTtBQUVBLDBEQUZBO0FBR0EsMENBSEE7QUFJQTtBQUpBLEVBSEE7O0FBVUE7QUFDQTtBQURBLEVBVkE7O0FBY0E7QUFDQTtBQUNBLGdCQURBO0FBRUE7QUFGQSxHQURBO0FBS0E7QUFDQSxlQURBO0FBRUE7QUFGQTtBQUxBLEVBZEE7O0FBeUJBLEtBekJBLGtCQXlCQTtBQUNBO0FBQ0Esb0JBREE7QUFFQTtBQUNBLDhDQURBO0FBRUE7QUFGQTtBQUZBO0FBT0EsRUFqQ0E7OztBQW1DQTtBQUNBOzs7QUFHQSxhQUpBLHlCQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFIQSxDQUdBO0FBQ0E7QUFDQTtBQUNBLEdBWEE7OztBQWFBOzs7QUFHQSxnQkFoQkEsNEJBZ0JBO0FBQ0Esa0JBQ0E7QUFDQSx5QkFEQTtBQUVBLG1DQUZBO0FBR0E7QUFIQSxJQURBO0FBT0E7QUFDQTtBQUNBLHdCQURBO0FBRUEsa0NBRkE7QUFHQTtBQUhBO0FBS0E7O0FBRUE7QUFDQSxHQWpDQTs7O0FBbUNBOzs7QUFHQSxrQkF0Q0EsOEJBc0NBO0FBQ0E7QUFDQSxXQUNBLGdEQUNBLDZDQUZBO0FBSUEsSUFMQTtBQU1BLEdBN0NBOzs7QUErQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FEQTtBQUVBO0FBRkE7QUFJQSxJQU5BO0FBT0E7QUFDQTtBQUNBO0FBVEEsR0FoREE7O0FBNERBO0FBQ0EscUJBN0RBLGlDQTZEQTtBQUNBLDRCQUNBLE1BREEsQ0FDQTtBQUFBO0FBQUEsSUFEQSxFQUVBLEdBRkEsQ0FFQTtBQUNBO0FBQ0EsdUJBREE7QUFFQTtBQUZBO0FBSUEsSUFQQTtBQVFBLEdBdEVBOzs7QUF3RUE7QUFDQSxjQXpFQSwwQkF5RUE7QUFDQTtBQUNBLEdBM0VBOzs7QUE2RUE7QUFDQSxTQTlFQSxxQkE4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FDQSxpREFEQSxFQUVBLG1CQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUF6RkEsRUFuQ0E7O0FBK0hBO0FBQ0E7Ozs7QUFJQSxlQUxBLDJCQUtBO0FBQ0E7QUFDQSxHQVBBOztBQVFBOzs7O0FBSUE7QUFDQTtBQUNBLEdBRkEsRUFFQSxHQUZBLENBWkE7O0FBZ0JBO0FBQ0EsV0FqQkEsdUJBaUJBO0FBQ0E7QUFDQSxHQW5CQTtBQW9CQSxZQXBCQSx3QkFvQkE7QUFDQTtBQUNBLEdBdEJBOzs7QUF3QkE7Ozs7O0FBS0EsMEJBN0JBLG9DQTZCQSxXQTdCQSxFQTZCQTtBQUFBOztBQUNBLHdDQUNBO0FBQUE7QUFBQSxJQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFDQSxRQURBLENBQ0EsMEJBREEsRUFDQTtBQUNBLHFCQURBO0FBRUE7QUFGQSxLQURBLEVBS0EsSUFMQSxDQUtBO0FBQ0E7QUFDQSxLQVBBO0FBUUE7QUFDQTtBQTlDQTtBQS9IQSxDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vc3JjL2NvbXBvbmVudHMvQ29udGFjdERldGFpbHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJi5qcyIsInNvdXJjZXNDb250ZW50IjpbIjwhLS1cbiAgLSBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxOCBKb2huIE1vbGFrdm/DpiA8c2tqbmxkc3ZAcHJvdG9ubWFpbC5jb20+XG4gIC1cbiAgLSBAYXV0aG9yIEpvaG4gTW9sYWt2b8OmIDxza2pubGRzdkBwcm90b25tYWlsLmNvbT5cbiAgLVxuICAtIEBsaWNlbnNlIEdOVSBBR1BMIHZlcnNpb24gMyBvciBhbnkgbGF0ZXIgdmVyc2lvblxuICAtXG4gIC0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAgLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICAtIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZVxuICAtIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gIC1cbiAgLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAgLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICAtIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAgLSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAgLVxuICAtIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICAtIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gIC1cbiAgLS0+XG5cbjx0ZW1wbGF0ZT5cblx0PGRpdiBpZD1cImNvbnRhY3QtZGV0YWlsc1wiIGNsYXNzPVwiYXBwLWNvbnRlbnQtZGV0YWlsc1wiPlxuXG5cdFx0PCEtLSBub3RoaW5nIHNlbGVjdGVkIG9yIGNvbnRhY3Qgbm90IGZvdW5kIC0tPlxuXHRcdDxkaXYgdi1pZj1cIiFjb250YWN0ICYmICFsb2FkaW5nXCIgaWQ9XCJlbXB0eWNvbnRlbnRcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJpY29uLWNvbnRhY3RzXCIgLz5cblx0XHRcdDxoMj57eyB0KCdjb250YWN0cycsICdObyBjb250YWN0IHNlbGVjdGVkJykgfX08L2gyPlxuXHRcdFx0PHA+e3sgdCgnY29udGFjdHMnLCAnU2VsZWN0IGEgY29udGFjdCBvbiB0aGUgbGlzdCB0byBiZWdpbicpIH19PC9wPlxuXHRcdDwvZGl2PlxuXG5cdFx0PCEtLSBsb2FkaW5nIC0tPlxuXHRcdDxkaXYgdi1lbHNlLWlmPVwiIWNvbnRhY3QgJiYgbG9hZGluZ1wiIGlkPVwiZW1wdHljb250ZW50XCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWN0c1wiIC8+XG5cdFx0XHQ8aDI+e3sgdCgnY29udGFjdHMnLCAnTG9hZGluZycpIH19PC9oMj5cblx0XHQ8L2Rpdj5cblxuXHRcdDx0ZW1wbGF0ZSB2LWVsc2U+XG5cdFx0XHQ8IS0tIGNvbnRhY3QgaGVhZGVyIC0tPlxuXHRcdFx0PGhlYWRlciA6c3R5bGU9XCJ7ICdiYWNrZ3JvdW5kQ29sb3InOiBjb2xvckF2YXRhciB9XCI+XG5cblx0XHRcdFx0PCEtLSBhdmF0YXIgYW5kIHVwbG9hZCBwaG90byAtLT5cblx0XHRcdFx0PGRpdiBpZD1cImNvbnRhY3QtaGVhZGVyLWF2YXRhclwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb250YWN0LWF2YXRhci1iYWNrZ3JvdW5kXCIgLz5cblx0XHRcdFx0XHQ8aW1nIHYtaWY9XCJjb250YWN0LnBob3RvXCI+XG5cdFx0XHRcdFx0PGlucHV0IGlkPVwiY29udGFjdC1hdmF0YXItdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBjbGFzcz1cImhpZGRlblwiXG5cdFx0XHRcdFx0XHRhY2NlcHQ9XCJpbWFnZS8qXCI+XG5cdFx0XHRcdFx0PGxhYmVsIHYtdG9vbHRpcC5hdXRvPVwidCgnY29udGFjdHMnLCAnVXBsb2FkIGEgbmV3IHBpY3R1cmUnKVwiIGZvcj1cImNvbnRhY3QtYXZhdGFyLXVwbG9hZFwiIGNsYXNzPVwiaWNvbi11cGxvYWQtd2hpdGVcIiAvPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8IS0tIGZ1bGxuYW1lLCBvcmcsIHRpdGxlIC0tPlxuXHRcdFx0XHQ8ZGl2IGlkPVwiY29udGFjdC1oZWFkZXItaW5mb3NcIj5cblx0XHRcdFx0XHQ8aDI+XG5cdFx0XHRcdFx0XHQ8aW5wdXQgaWQ9XCJjb250YWN0LWZ1bGxuYW1lXCIgdi1tb2RlbD1cImNvbnRhY3QuZnVsbE5hbWVcIiA6ZGlzYWJsZWQ9XCIhY29udGFjdC5hZGRyZXNzYm9vay5lbmFibGVkXCJcblx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwidCgnY29udGFjdHMnLCAnTmFtZScpXCIgdHlwZT1cInRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuXHRcdFx0XHRcdFx0XHRhdXRvY29ycmVjdD1cIm9mZlwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIG5hbWU9XCJmdWxsbmFtZVwiXG5cdFx0XHRcdFx0XHRcdHZhbHVlPVwiXCIgQGlucHV0PVwiZGVib3VuY2VVcGRhdGVDb250YWN0XCI+XG5cdFx0XHRcdFx0PC9oMj5cblx0XHRcdFx0XHQ8ZGl2IGlkPVwiZGV0YWlscy1vcmctY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0XHQ8aW5wdXQgaWQ9XCJjb250YWN0LW9yZ1wiIHYtbW9kZWw9XCJjb250YWN0Lm9yZ1wiIDpkaXNhYmxlZD1cIiFjb250YWN0LmFkZHJlc3Nib29rLmVuYWJsZWRcIlxuXHRcdFx0XHRcdFx0XHQ6cGxhY2Vob2xkZXI9XCJ0KCdjb250YWN0cycsICdDb21wYW55JylcIiB0eXBlPVwidGV4dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG5cdFx0XHRcdFx0XHRcdGF1dG9jb3JyZWN0PVwib2ZmXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgbmFtZT1cIm9yZ1wiXG5cdFx0XHRcdFx0XHRcdHZhbHVlPVwiXCIgQGlucHV0PVwiZGVib3VuY2VVcGRhdGVDb250YWN0XCI+XG5cdFx0XHRcdFx0XHQ8aW5wdXQgaWQ9XCJjb250YWN0LXRpdGxlXCIgdi1tb2RlbD1cImNvbnRhY3QudGl0bGVcIiA6ZGlzYWJsZWQ9XCIhY29udGFjdC5hZGRyZXNzYm9vay5lbmFibGVkXCJcblx0XHRcdFx0XHRcdFx0OnBsYWNlaG9sZGVyPVwidCgnY29udGFjdHMnLCAnVGl0bGUnKVwiIHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcblx0XHRcdFx0XHRcdFx0YXV0b2NvcnJlY3Q9XCJvZmZcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBuYW1lPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHR2YWx1ZT1cIlwiIEBpbnB1dD1cImRlYm91bmNlVXBkYXRlQ29udGFjdFwiPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8IS0tIGFjdGlvbnMgLS0+XG5cdFx0XHRcdDxkaXYgaWQ9XCJjb250YWN0LWhlYWRlci1hY3Rpb25zXCI+XG5cdFx0XHRcdFx0PGRpdiB2LWNsaWNrLW91dHNpZGU9XCJjbG9zZU1lbnVcIiBjbGFzcz1cIm1lbnUtaWNvbiBpY29uLW1vcmUtd2hpdGVcIiBAY2xpY2s9XCJ0b2dnbGVNZW51XCIgLz5cblx0XHRcdFx0XHQ8ZGl2IDpjbGFzcz1cInsgJ29wZW4nOiBvcGVuZWRNZW51IH1cIiBjbGFzcz1cInBvcG92ZXJtZW51XCI+XG5cdFx0XHRcdFx0XHQ8cG9wb3Zlci1tZW51IDptZW51PVwiY29udGFjdEFjdGlvbnNcIiAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvaGVhZGVyPlxuXG5cdFx0XHQ8IS0tIGNvbnRhY3QgZGV0YWlscyAtLT5cblx0XHRcdDxzZWN0aW9uIGNsYXNzPVwiY29udGFjdC1kZXRhaWxzXCI+XG5cblx0XHRcdFx0PCEtLSBwcm9wZXJ0aWVzIGl0ZXJhdGlvbiAtLT5cblx0XHRcdFx0PGNvbnRhY3QtZGV0YWlscy1wcm9wZXJ0eSB2LWZvcj1cIihwcm9wZXJ0eSwgaW5kZXgpIGluIHNvcnRlZFByb3BlcnRpZXNcIiA6a2V5PVwiaW5kZXhcIiA6aW5kZXg9XCJpbmRleFwiXG5cdFx0XHRcdFx0OnNvcnRlZC1wcm9wZXJ0aWVzPVwic29ydGVkUHJvcGVydGllc1wiIDpwcm9wZXJ0eT1cInByb3BlcnR5XCIgOmNvbnRhY3Q9XCJjb250YWN0XCJcblx0XHRcdFx0XHRAdXBkYXRlZGNvbnRhY3Q9XCJ1cGRhdGVDb250YWN0XCIgLz5cblxuXHRcdFx0XHQ8IS0tIGFkZHJlc3Nib29rIGNoYW5nZSBzZWxlY3QgLS0+XG5cdFx0XHRcdDxwcm9wZXJ0eS1zZWxlY3QgOnByb3AtbW9kZWw9XCJhZGRyZXNzYm9va01vZGVsXCIgOnZhbHVlLnN5bmM9XCJhZGRyZXNzYm9va1wiXG5cdFx0XHRcdFx0Om9wdGlvbnM9XCJhZGRyZXNzYm9va3NPcHRpb25zXCIgY2xhc3M9XCJwcm9wZXJ0eS0tYWRkcmVzc2Jvb2tzXCIgLz5cblx0XHRcdDwvc2VjdGlvbj5cblx0XHQ8L3RlbXBsYXRlPlxuXHQ8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgQ2xpY2tPdXRzaWRlIGZyb20gJ3Z1ZS1jbGljay1vdXRzaWRlJ1xuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVlRvb2x0aXAgZnJvbSAndi10b29sdGlwJ1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2RlYm91bmNlJ1xuXG5pbXBvcnQgQ29udGFjdCBmcm9tICcuLi9tb2RlbHMvY29udGFjdCdcbmltcG9ydCByZmNQcm9wcyBmcm9tICcuLi9tb2RlbHMvcmZjUHJvcHMuanMnXG5cbmltcG9ydCBQb3BvdmVyTWVudSBmcm9tICcuL2NvcmUvcG9wb3Zlck1lbnUnXG5pbXBvcnQgQ29udGFjdERldGFpbHNQcm9wZXJ0eSBmcm9tICcuL0NvbnRhY3REZXRhaWxzL0NvbnRhY3REZXRhaWxzUHJvcGVydHknXG5pbXBvcnQgUHJvcGVydHlTZWxlY3QgZnJvbSAnLi9Qcm9wZXJ0aWVzL1Byb3BlcnR5U2VsZWN0J1xuaW1wb3J0IFByb3BlcnR5R3JvdXBzIGZyb20gJy4vUHJvcGVydGllcy9Qcm9wZXJ0eUdyb3VwcydcblxuVnVlLnVzZShWVG9vbHRpcClcblxuZXhwb3J0IGRlZmF1bHQge1xuXHRuYW1lOiAnQ29udGFjdERldGFpbHMnLFxuXG5cdGNvbXBvbmVudHM6IHtcblx0XHRQb3BvdmVyTWVudSxcblx0XHRDb250YWN0RGV0YWlsc1Byb3BlcnR5LFxuXHRcdFByb3BlcnR5U2VsZWN0LFxuXHRcdFByb3BlcnR5R3JvdXBzXG5cdH0sXG5cblx0ZGlyZWN0aXZlczoge1xuXHRcdENsaWNrT3V0c2lkZVxuXHR9LFxuXG5cdHByb3BzOiB7XG5cdFx0bG9hZGluZzoge1xuXHRcdFx0dHlwZTogQm9vbGVhbixcblx0XHRcdGRlZmF1bHQ6IHRydWVcblx0XHR9LFxuXHRcdHVpZDoge1xuXHRcdFx0dHlwZTogU3RyaW5nLFxuXHRcdFx0ZGVmYXVsdDogdW5kZWZpbmVkXG5cdFx0fVxuXHR9LFxuXG5cdGRhdGEoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG9wZW5lZE1lbnU6IGZhbHNlLFxuXHRcdFx0YWRkcmVzc2Jvb2tNb2RlbDoge1xuXHRcdFx0XHRyZWFkYWJsZU5hbWU6IHQoJ2NvbnRhY3RzJywgJ0FkZHJlc3Nib29rJyksXG5cdFx0XHRcdGljb246ICdpY29uLWFkZHJlc3Nib29rJ1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRjb21wdXRlZDoge1xuXHRcdC8qKlxuXHRcdCAqIENvbnRhY3QgY29sb3IgYmFzZWQgb24gdWlkXG5cdFx0ICovXG5cdFx0Y29sb3JBdmF0YXIoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsZXQgY29sb3IgPSB0aGlzLmNvbnRhY3QudWlkLnRvUmdiKClcblx0XHRcdFx0cmV0dXJuIGByZ2IoJHtjb2xvci5yfSwgJHtjb2xvci5nfSwgJHtjb2xvci5ifSlgXG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJldHVybiAnZ3JleSdcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSGVhZGVyIGFjdGlvbnMgZm9yIHRoZSBjb250YWN0XG5cdFx0ICovXG5cdFx0Y29udGFjdEFjdGlvbnMoKSB7XG5cdFx0XHRsZXQgYWN0aW9ucyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGljb246ICdpY29uLWRvd25sb2FkJyxcblx0XHRcdFx0XHR0ZXh0OiB0KCdjb250YWN0cycsICdEb3dubG9hZCcpLFxuXHRcdFx0XHRcdGhyZWY6IHRoaXMuY29udGFjdC51cmxcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdFx0aWYgKHRoaXMuY29udGFjdC5hZGRyZXNzYm9vay5lbmFibGVkKSB7XG5cdFx0XHRcdGFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0aWNvbjogJ2ljb24tZGVsZXRlJyxcblx0XHRcdFx0XHR0ZXh0OiB0KCdjb250YWN0cycsICdEZWxldGUnKSxcblx0XHRcdFx0XHRhY3Rpb246IHRoaXMuZGVsZXRlQ29udGFjdFxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gYWN0aW9uc1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDb250YWN0IHByb3BlcnRpZXMgY29waWVkIGFuZCBzb3J0ZWQgYnkgcmZjUHJvcHMuZmllbGRPcmRlclxuXHRcdCAqL1xuXHRcdHNvcnRlZFByb3BlcnRpZXMoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250YWN0LnByb3BlcnRpZXMuc2xpY2UoMCkuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdHJmY1Byb3BzLmZpZWxkT3JkZXIuaW5kZXhPZihhLm5hbWUpIC1cblx0XHRcdFx0XHRyZmNQcm9wcy5maWVsZE9yZGVyLmluZGV4T2YoYi5uYW1lKVxuXHRcdFx0XHQpXG5cdFx0XHR9KVxuXHRcdH0sXG5cblx0XHQvLyB1c2FibGUgYWRkcmVzc2Jvb2sgb2JqZWN0IGxpbmtlZCB0byB0aGUgbG9jYWwgY29udGFjdFxuXHRcdGFkZHJlc3Nib29rOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGlkOiB0aGlzLmNvbnRhY3QuYWRkcmVzc2Jvb2suaWQsXG5cdFx0XHRcdFx0bmFtZTogdGhpcy5jb250YWN0LmFkZHJlc3Nib29rLmRpc3BsYXlOYW1lXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKGFkZHJlc3Nib29rKSB7XG5cdFx0XHRcdHRoaXMubW92ZUNvbnRhY3RUb0FkZHJlc3Nib29rKGFkZHJlc3Nib29rKVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBzdG9yZSBnZXR0ZXJzIGZpbHRlcmVkIGFuZCBtYXBwZWQgdG8gdXNhYmxlIG9iamVjdFxuXHRcdGFkZHJlc3Nib29rc09wdGlvbnMoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRyZXNzYm9va3Ncblx0XHRcdFx0LmZpbHRlcihhZGRyZXNzYm9vayA9PiBhZGRyZXNzYm9vay5lbmFibGVkKVxuXHRcdFx0XHQubWFwKGFkZHJlc3Nib29rID0+IHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0aWQ6IGFkZHJlc3Nib29rLmlkLFxuXHRcdFx0XHRcdFx0bmFtZTogYWRkcmVzc2Jvb2suZGlzcGxheU5hbWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0fSxcblxuXHRcdC8vIHN0b3JlIGdldHRlclxuXHRcdGFkZHJlc3Nib29rcygpIHtcblx0XHRcdHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldEFkZHJlc3Nib29rc1xuXHRcdH0sXG5cblx0XHQvLyBsb2NhbCB2ZXJzaW9uIG9mIHRoZSBjb250YWN0XG5cdFx0Y29udGFjdCgpIHtcblx0XHRcdGxldCBjb250YWN0ID0gdGhpcy4kc3RvcmUuZ2V0dGVycy5nZXRDb250YWN0KHRoaXMudWlkKVxuXHRcdFx0aWYgKGNvbnRhY3QpIHtcblx0XHRcdFx0Ly8gY3JlYXRlIGVtcHR5IGNvbnRhY3QgYW5kIGNvcHkgaW5uZXIgZGF0YVxuXHRcdFx0XHRsZXQgbG9jYWxDb250YWN0ID0gbmV3IENvbnRhY3QoXG5cdFx0XHRcdFx0J0JFR0lOOlZDQVJEXFxuVUlEOicgKyBjb250YWN0LnVpZCArICdcXG5FTkQ6VkNBUkQnLFxuXHRcdFx0XHRcdGNvbnRhY3QuYWRkcmVzc2Jvb2tcblx0XHRcdFx0KVxuXHRcdFx0XHRsb2NhbENvbnRhY3QudXBkYXRlQ29udGFjdChjb250YWN0LmpDYWwpXG5cdFx0XHRcdHJldHVybiBsb2NhbENvbnRhY3Rcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0bWV0aG9kczoge1xuXHRcdC8qKlxuXHRcdCAqIEV4ZWN1dGVkIG9uIHRoZSAndXBkYXRlZGNvbnRhY3QnIGV2ZW50XG5cdFx0ICogU2VuZCB0aGUgbG9jYWwgY2xvbmUgb2YgY29udGFjdCB0byB0aGUgc3RvcmVcblx0XHQgKi9cblx0XHR1cGRhdGVDb250YWN0KCkge1xuXHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VwZGF0ZUNvbnRhY3QnLCB0aGlzLmNvbnRhY3QpXG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBEZWJvdW5jZSB0aGUgY29udGFjdCB1cGRhdGUgZm9yIHRoZSBoZWFkZXIgcHJvcHNcblx0XHQgKiBwaG90bywgZm4sIG9yZywgdGl0bGVcblx0XHQgKi9cblx0XHRkZWJvdW5jZVVwZGF0ZUNvbnRhY3Q6IGRlYm91bmNlKGZ1bmN0aW9uKGUpIHtcblx0XHRcdHRoaXMudXBkYXRlQ29udGFjdCgpXG5cdFx0fSwgNTAwKSxcblxuXHRcdC8vIG1lbnUgaGFuZGxpbmdcblx0XHRjbG9zZU1lbnUoKSB7XG5cdFx0XHR0aGlzLm9wZW5lZE1lbnUgPSBmYWxzZVxuXHRcdH0sXG5cdFx0dG9nZ2xlTWVudSgpIHtcblx0XHRcdHRoaXMub3BlbmVkTWVudSA9ICF0aGlzLm9wZW5lZE1lbnVcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogTW92ZSBjb250YWN0IHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzc2Jvb2tcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBhZGRyZXNzYm9vayB0aGUgZGVzaXJlZCBhZGRyZXNzYm9va1xuXHRcdCAqL1xuXHRcdG1vdmVDb250YWN0VG9BZGRyZXNzYm9vayhhZGRyZXNzYm9vaykge1xuXHRcdFx0YWRkcmVzc2Jvb2sgPSB0aGlzLmFkZHJlc3Nib29rcy5maW5kKFxuXHRcdFx0XHRzZWFyY2ggPT4gc2VhcmNoLmlkID09PSBhZGRyZXNzYm9vay5pZFxuXHRcdFx0KVxuXHRcdFx0Ly8gd2UgbmVlZCB0byB1c2UgdGhlIHN0b3JlIGNvbnRhY3QsIG5vdCB0aGUgbG9jYWwgY29udGFjdFxuXHRcdFx0bGV0IGNvbnRhY3QgPSB0aGlzLiRzdG9yZS5nZXR0ZXJzLmdldENvbnRhY3QodGhpcy5jb250YWN0LmtleSlcblx0XHRcdC8vIFRPRE8gTWFrZSBzdXJlIHdlIGRvIG5vdCBvdmVyd3JpdGUgY29udGFjdHNcblx0XHRcdGlmIChhZGRyZXNzYm9vaykge1xuXHRcdFx0XHR0aGlzLiRzdG9yZVxuXHRcdFx0XHRcdC5kaXNwYXRjaCgnbW92ZUNvbnRhY3RUb0FkZHJlc3Nib29rJywge1xuXHRcdFx0XHRcdFx0Y29udGFjdDogY29udGFjdCxcblx0XHRcdFx0XHRcdGFkZHJlc3Nib29rXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUNvbnRhY3QoKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG48L3NjcmlwdD5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/components/ContactDetails.vue?vue&type=script&lang=js&\n");
+eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar settle = __webpack_require__(/*! ./../core/settle */ \"./node_modules/axios/lib/core/settle.js\");\nvar buildURL = __webpack_require__(/*! ./../helpers/buildURL */ \"./node_modules/axios/lib/helpers/buildURL.js\");\nvar parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ \"./node_modules/axios/lib/helpers/parseHeaders.js\");\nvar isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ \"./node_modules/axios/lib/helpers/isURLSameOrigin.js\");\nvar createError = __webpack_require__(/*! ../core/createError */ \"./node_modules/axios/lib/core/createError.js\");\nvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__(/*! ./../helpers/btoa */ \"./node_modules/axios/lib/helpers/btoa.js\");\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (\"development\" !== 'test' &&\n typeof window !== 'undefined' &&\n window.XDomainRequest && !('withCredentials' in request) &&\n !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n // IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = __webpack_require__(/*! ./../helpers/cookies */ \"./node_modules/axios/lib/helpers/cookies.js\");\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcz9jZmQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG52YXIgYnRvYSA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuYnRvYSAmJiB3aW5kb3cuYnRvYS5iaW5kKHdpbmRvdykpIHx8IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idG9hJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgdmFyIGxvYWRFdmVudCA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xuICAgIHZhciB4RG9tYWluID0gZmFsc2U7XG5cbiAgICAvLyBGb3IgSUUgOC85IENPUlMgc3VwcG9ydFxuICAgIC8vIE9ubHkgc3VwcG9ydHMgUE9TVCBhbmQgR0VUIGNhbGxzIGFuZCBkb2Vzbid0IHJldHVybnMgdGhlIHJlc3BvbnNlIGhlYWRlcnMuXG4gICAgLy8gRE9OJ1QgZG8gdGhpcyBmb3IgdGVzdGluZyBiL2MgWE1MSHR0cFJlcXVlc3QgaXMgbW9ja2VkLCBub3QgWERvbWFpblJlcXVlc3QuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgd2luZG93LlhEb21haW5SZXF1ZXN0ICYmICEoJ3dpdGhDcmVkZW50aWFscycgaW4gcmVxdWVzdCkgJiZcbiAgICAgICAgIWlzVVJMU2FtZU9yaWdpbihjb25maWcudXJsKSkge1xuICAgICAgcmVxdWVzdCA9IG5ldyB3aW5kb3cuWERvbWFpblJlcXVlc3QoKTtcbiAgICAgIGxvYWRFdmVudCA9ICdvbmxvYWQnO1xuICAgICAgeERvbWFpbiA9IHRydWU7XG4gICAgICByZXF1ZXN0Lm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbiBoYW5kbGVQcm9ncmVzcygpIHt9O1xuICAgICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge307XG4gICAgfVxuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlXG4gICAgcmVxdWVzdFtsb2FkRXZlbnRdID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCB8fCAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0ICYmICF4RG9tYWluKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFjb25maWcucmVzcG9uc2VUeXBlIHx8IGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICd0ZXh0JyA/IHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAvLyBJRSBzZW5kcyAxMjIzIGluc3RlYWQgb2YgMjA0IChodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzIwMSlcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyA9PT0gMTIyMyA/IDIwNCA6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1cyA9PT0gMTIyMyA/ICdObyBDb250ZW50JyA6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgdmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xuXG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHZhciB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oY29uZmlnLnVybCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tjb25maWcueHNyZkhlYWRlck5hbWVdID0geHNyZlZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdERhdGEgPT09ICd1bmRlZmluZWQnICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGhlYWRlciB0byB0aGUgcmVxdWVzdFxuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoY29uZmlnLndpdGhDcmVkZW50aWFscykge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBFeHBlY3RlZCBET01FeGNlcHRpb24gdGhyb3duIGJ5IGJyb3dzZXJzIG5vdCBjb21wYXRpYmxlIFhNTEh0dHBSZXF1ZXN0IExldmVsIDIuXG4gICAgICAgIC8vIEJ1dCwgdGhpcyBjYW4gYmUgc3VwcHJlc3NlZCBmb3IgJ2pzb24nIHR5cGUgYXMgaXQgY2FuIGJlIHBhcnNlZCBieSBkZWZhdWx0ICd0cmFuc2Zvcm1SZXNwb25zZScgZnVuY3Rpb24uXG4gICAgICAgIGlmIChjb25maWcucmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnByb21pc2UudGhlbihmdW5jdGlvbiBvbkNhbmNlbGVkKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlamVjdChjYW5jZWwpO1xuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/adapters/xhr.js\n");
/***/ }),
-/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./src/components/ContactDetails/ContactDetailsProperty.vue?vue&type=script&lang=js&":
-/*!*****************************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/ContactDetails/ContactDetailsProperty.vue?vue&type=script&lang=js& ***!
- \*****************************************************************************************************************************************************************************/
+/***/ "./node_modules/axios/lib/axios.js":
+/*!*****************************************!*\
+ !*** ./node_modules/axios/lib/axios.js ***!
+ \*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
-eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _ical = __webpack_require__(/*! ical.js */ \"./node_modules/ical.js/build/ical.js\");\n\nvar _rfcProps = __webpack_require__(/*! ../../models/rfcProps.js */ \"./src/models/rfcProps.js\");\n\nvar _rfcProps2 = _interopRequireDefault(_rfcProps);\n\nvar _contact = __webpack_require__(/*! ../../models/contact */ \"./src/models/contact.js\");\n\nvar _contact2 = _interopRequireDefault(_contact);\n\nvar _PropertyText = __webpack_require__(/*! ../Properties/PropertyText */ \"./src/components/Properties/PropertyText.vue\");\n\nvar _PropertyText2 = _interopRequireDefault(_PropertyText);\n\nvar _PropertyMultipleText = __webpack_require__(/*! ../Properties/PropertyMultipleText */ \"./src/components/Properties/PropertyMultipleText.vue\");\n\nvar _PropertyMultipleText2 = _interopRequireDefault(_PropertyMultipleText);\n\nvar _PropertyDateTime = __webpack_require__(/*! ../Properties/PropertyDateTime */ \"./src/components/Properties/PropertyDateTime.vue\");\n\nvar _PropertyDateTime2 = _interopRequireDefault(_PropertyDateTime);\n\nvar _PropertyGroups = __webpack_require__(/*! ../Properties/PropertyGroups */ \"./src/components/Properties/PropertyGroups.vue\");\n\nvar _PropertyGroups2 = _interopRequireDefault(_PropertyGroups);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// import PropertySelect from '../Properties/PropertyMultipleText'\n\nexports.default = {\n\tname: 'ContactDetailsProperty',\n\n\tprops: {\n\t\tproperty: {\n\t\t\ttype: _ical.Property,\n\t\t\tdefault: true\n\t\t},\n\t\tsortedProperties: {\n\t\t\ttype: Array,\n\t\t\tdefault: function _default() {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0\n\t\t},\n\t\tcontact: {\n\t\t\ttype: _contact2.default,\n\t\t\tdefault: null\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t// dynamically load component based on property type\n\t\tcomponentInstance: function componentInstance() {\n\t\t\t// groups\n\t\t\tif (this.propName === 'categories') {\n\t\t\t\treturn _PropertyGroups2.default;\n\t\t\t}\n\n\t\t\t// dynamic matching\n\t\t\tif (this.property.isMultiValue && this.propType === 'text') {\n\t\t\t\treturn _PropertyMultipleText2.default;\n\t\t\t} else if (this.propType && ['date-and-or-time', 'date-time', 'time', 'date'].indexOf(this.propType) > -1) {\n\t\t\t\treturn _PropertyDateTime2.default;\n\t\t\t} else if (this.propType && this.propType !== 'unknown') {\n\t\t\t\treturn _PropertyText2.default;\n\t\t\t}\n\t\t\treturn _PropertyText2.default;\n\t\t},\n\n\n\t\t// rfc properties list\n\t\tproperties: function properties() {\n\t\t\treturn _rfcProps2.default.properties;\n\t\t},\n\t\tfieldOrder: function fieldOrder() {\n\t\t\treturn _rfcProps2.default.fieldOrder;\n\t\t},\n\n\n\t\t// is this the first property of its kind\n\t\tisFirstProperty: function isFirstProperty() {\n\t\t\tif (this.index > 0) {\n\t\t\t\treturn this.sortedProperties[this.index - 1].name !== this.propName;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// is this the last property of its kind\n\t\tisLastProperty: function isLastProperty() {\n\t\t\t// array starts at 0, length starts at 1\n\t\t\tif (this.index < this.sortedProperties.length - 1) {\n\t\t\t\treturn this.sortedProperties[this.index + 1].name !== this.propName;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\n\t\t// the type of the prop e.g. FN\n\t\tpropName: function propName() {\n\t\t\treturn this.property.name;\n\t\t},\n\t\tpropType: function propType() {\n\t\t\treturn this.property.type;\n\t\t},\n\n\n\t\t// template to use\n\t\tpropModel: function propModel() {\n\t\t\treturn this.properties[this.propName];\n\t\t},\n\n\n\t\t// select type handler\n\t\tselectType: {\n\t\t\tget: function get() {\n\t\t\t\tif (this.propModel && this.propModel.options && this.type) {\n\n\t\t\t\t\tvar selectedType = this.type\n\t\t\t\t\t// vcard 3.0 save pref alongside TYPE\n\t\t\t\t\t.filter(function (type) {\n\t\t\t\t\t\treturn type !== 'pref';\n\t\t\t\t\t})\n\t\t\t\t\t// we only use uppercase strings\n\t\t\t\t\t.map(function (str) {\n\t\t\t\t\t\treturn str.toUpperCase();\n\t\t\t\t\t});\n\n\t\t\t\t\t// Compare array and score them by how many matches they have to the selected type\n\t\t\t\t\t// sorting directly is cleaner but slower\n\t\t\t\t\t// https://jsperf.com/array-map-and-intersection-perf\n\t\t\t\t\tvar matchingTypes = this.propModel.options.map(function (type) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\t// \"WORK,HOME\" => ['WORK', 'HOME']\n\t\t\t\t\t\t\tscore: type.id.split(',').filter(function (value) {\n\t\t\t\t\t\t\t\treturn selectedType.indexOf(value) !== -1;\n\t\t\t\t\t\t\t}).length\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\t\t// Sort by score, filtering out the null score and selecting the first match\n\t\t\t\t\tvar matchingType = matchingTypes.sort(function (a, b) {\n\t\t\t\t\t\treturn b.score - a.score;\n\t\t\t\t\t}).filter(function (type) {\n\t\t\t\t\t\treturn type.score > 0;\n\t\t\t\t\t})[0];\n\n\t\t\t\t\tif (matchingType) {\n\t\t\t\t\t\treturn matchingType.type;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.type) {\n\t\t\t\t\t// vcard 3.0 save pref alongside TYPE\n\t\t\t\t\tvar _selectedType = this.type.filter(function (type) {\n\t\t\t\t\t\treturn type !== 'pref';\n\t\t\t\t\t}).join(',');\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: _selectedType,\n\t\t\t\t\t\tname: _selectedType\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tset: function set(data) {\n\t\t\t\t// ical.js take types as arrays\n\t\t\t\tthis.type = data.id.split(',');\n\t\t\t\tthis.$emit('updatedcontact');\n\t\t\t}\n\t\t},\n\n\t\t// property value(s)\n\t\tvalue: {\n\t\t\tget: function get() {\n\t\t\t\tif (this.property.isMultiValue) {\n\t\t\t\t\t// differences between values types :x;x;x;x;x and x,x,x,x,x\n\t\t\t\t\treturn this.property.isStructuredValue ? this.property.getValues()[0] : this.property.getValues();\n\t\t\t\t}\n\t\t\t\treturn this.property.getFirstValue();\n\t\t\t},\n\t\t\tset: function set(data) {\n\t\t\t\tif (this.property.isMultiValue) {\n\t\t\t\t\t// differences between values types :x;x;x;x;x and x,x,x,x,x\n\t\t\t\t\tthis.property.isStructuredValue ? this.property.setValues([data]) : this.property.setValues(data);\n\t\t\t\t}\n\t\t\t\tthis.property.setValue(data);\n\t\t\t\tthis.$emit('updatedcontact');\n\t\t\t}\n\t\t},\n\n\t\t// property meta type\n\t\ttype: {\n\t\t\tget: function get() {\n\t\t\t\tvar type = this.property.getParameter('type');\n\t\t\t\t// ensure we have an array\n\t\t\t\tif (type) {\n\t\t\t\t\treturn Array.isArray(type) ? type : [type];\n\t\t\t\t}\n\t\t\t},\n\t\t\tset: function set(data) {\n\t\t\t\tthis.property.setParameter('type', data);\n\t\t\t}\n\t\t},\n\n\t\t// property meta pref\n\t\tpref: {\n\t\t\tget: function get(